简介
在javaWeb中,处理文件上传下载还是挺麻烦的,但是在springmvc中就简单很多了,下面来进行介绍。
文件上传
springmvc实现了MultiPartResolver接口,所以可以对上传的文件进行解析,实现这个接口的是CommonsMultiPartResolver
在springmvc中,默认是没有启用这个文件上传类的,我们需要将其配置进去
<bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
下面,我们在web目录下面建一个文件夹,里面随便放一个文件,不然out目录可能并不会生成该目录
然后就是创建对应的handler
@RequestMapping("/upload")
public String upload(@RequestParam("file") MultipartFile uploadFile, HttpServletRequest request) throws IOException {
//获取文件名称
String filename = uploadFile.getOriginalFilename();
//得到保存的路径
String savePath = request.getServletContext().getRealPath("/file/" + filename);
System.out.println(savePath);
//创建文件
File file = new File(savePath);
if (!file.exists() && !file.createNewFile())return "fail";
//转存文件
uploadFile.transferTo(file);
return "success";
}
解释一下,我们提交的文件使用MultipartFile来进行接受,然后进行转存就行。
来测试一下,使用postman进行测试
注意:需要将提交格式设置为mutilpart/form-data。如果是前端使用form表单进行提交,通过设置enctype就行
提交后后端成功接收到图片
文件下载
文件下载就是通过返回一个ReponseEntity来完成的,注意:需要给该方法标识为@ResponseBody,因为我在类上使用了@RestController,所以就不用标识了。
@RequestMapping("/download")
public ResponseEntity<byte[]> download(){
return null;
}
ResponseEntity里面的类型我们填写的是byte[],就是表示返回的文件是二进制的。接下来我们就需要构建一个ResponseBody进行返回,下面为该类的构造器
很明显,body就是我们要返回的二进制文件,header和status就是响应头和响应体,下面就是最终的代码
@RequestMapping("/download")
public ResponseEntity<byte[]> download(HttpServletRequest request) throws IOException {
//返回的文件名称
String fileName = "3.jpg";
//文件绝对路径
String realPath = request.getServletContext().getRealPath("/file/" + fileName);
//输入流
InputStream inputStream = new FileInputStream(realPath);
//根据文件大小构建byte[]数组
byte[] bytes = new byte[inputStream.available()];
//读数据
inputStream.read(bytes);
//创建Headers
HttpHeaders headers = new HttpHeaders();
//告诉游览器返回的是文件
headers.add("Content-Disposition", "attachment;filename=" + fileName);
//创建Status,HttpStatus.OK就是表示200
HttpStatus status = HttpStatus.OK;
return new ResponseEntity<>(bytes, headers, status);
}
游览器进行访问
成功实现功能。
总结
上面就是上传下载的方法,很简单,大家根据自己需要进行扩展即可