Spring 4MVC下实现文件的上传下载

在Spring 4MVC中实现文件的上传下载很简单,如同使用struts2实现文件上传下载一样。


首先实现单文件的上传:

  • 新建的jsp文件

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<title>文件上传</title>
	</head>
	
	<body>
		<form action="oneFileUpload.spring" method="post" enctype="multipart/form-data">
			<input type="text" name="username"/>
			<input type="file" name="uploadFile"/>
			<input type="submit" value="开始上传" />
		</form>
	</body>
</html>

与其他的jsp文件没有什么不同,需要注意的是form表达需要设置一下enctype属性值为“multipart/form-data”;

  • 在SpringMVC-servlet.xml中添加通用的解析器

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="maxUploadSize" value="2048000000"></property>
	</bean>

这里bean的id一定要命名为“multipartResolver”,否则框架注入这个bean的时候会出错。这个bean的作用就是判断请求中是否有上传文件的请求。

  • 然后实现控制层

@Controller
public class FileUpload {

	@RequestMapping("/oneFileUpload")
	public void oneFileUpload(MultipartHttpServletRequest request,HttpServletResponse response){
		try{
			System.out.println("username = "+request.getParameter("username"));
			//获取将要上传的文件
			MultipartFile file = request.getFile("uploadFile");
			//获取上传文件的原名
			String uploadFileName = file.getOriginalFilename();
			//获取要上传文件的输入流
			InputStream isRef = file.getInputStream();
			String targetDir = request.getSession().getServletContext().getRealPath("/upload");
			//在上传的目录中创建文件
			File targetFile = new File(targetDir,uploadFileName);
			//获取文件的输出流
			FileOutputStream fosRef = new FileOutputStream(targetFile);
			//文件的复制
			IOUtils.copy(isRef, fosRef);
			
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
}

这里使用的是没有注解的获取上传文件的方法,还有一种是基于注解的方法,更为常用。

@Controller
public class FileUpload2 {

	@RequestMapping("/upload")
	public void oneFileUpload(@RequestParam String username,
			@RequestParam MultipartFile uploadFile,HttpServletRequest request){
		
		System.out.println("username="+username);
		MultipartFile file = uploadFile;
		String uploadFileName = file.getOriginalFilename();
		
		try {
			InputStream isRef = file.getInputStream();
		
			String targetDir = request.getSession().getServletContext().getRealPath("/upload");
			File targetFile = new File(targetDir,uploadFileName);
			FileOutputStream outRef = new FileOutputStream(targetFile);
			IOUtils.copy(isRef, outRef);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
			
	}
}

这样就实现了单文件的上传.备注:在相应的目录下要建立上传的文件夹upload,否则会报错。


多文件的上传其实和单文件上传一样,jsp文件和配置文件就省略了,直接看控制层的代码

@Controller
public class MuchFileUpload {
    
    @RequestMapping("/muchFileUpload")
    public void muchFile(MultipartHttpServletRequest request){
        System.out.println("username="+request.getParameter("username"));
        try{
            //获取将要上传的多个文件<文件名,文件>
            Map<String,MultipartFile> fileMap = request.getFileMap();
            System.out.println("上传的文件的数量为:"+fileMap.size());
            //将键转为set
            Set<String> fileSet = fileMap.keySet();
            //获取set集合的迭代器
            Iterator<String> fileNameIterator = fileSet.iterator();
            while(fileNameIterator.hasNext()) {
                String fileName = fileNameIterator.next();
                System.out.println(fileName);
                MultipartFile file = fileMap.get(fileName);
                fileName = file.getOriginalFilename();
                InputStream isRef = file.getInputStream();
                String targetDir = request.getSession().getServletContext().getRealPath("/upload");
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy_mm_dd_hh_mm_ss");
                String getDateString = sdf.format(new Date());
                File targetFile = new File(targetDir,getDateString+"_"+fileName);
                FileOutputStream outRef = new FileOutputStream(targetFile);
                IOUtils.copy(isRef, outRef);
            }
        }catch(Exception e) {
            e.printStackTrace();
        }
    }
}

上面就实现了文件的上传


Spring 4MVC框架下的文件下载实现【同理配置文件以及jsp省略】

控制层的代码为:

@Controller
public class FileDownload {

	@RequestMapping("/download")
	public void download(HttpServletRequest request,HttpServletResponse response) throws Exception {
		
		String name = "中文.rar";
		String fileName = new String(name.getBytes(),"IOS8859-1");
		response.setContentType("application/x-msdownload");
		FileInputStream fisRef = new FileInputStream(new File(request.getSession().getServletContext().getRealPath("/upload")+"/"+name));
		response.setHeader("Content-Disposition", "attachment;filename="+fileName);
		OutputStream osRef = response.getOutputStream();
		IOUtils.copy(fisRef, osRef);
	}
}

上面便实现了文件的相关操作,在这个操作中,用到了俩个JAR包,commons-fileupload.jar以及commons-io.jar。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值