如何在springmvc中如何实现文件的上传下载?
目录
文件上传
文件下载
总结
文件上传
获取上传文件的内容:首先文件上传得导入common-io,common-upload
1.通过CommonsMultipartFile类获取上传的文件内容
@RequestMapping("/fileupload1")
public String fileUpload(@RequestParam("file") CommonsMultipartFile file)
throws IllegalStateException, IOException {
System.out.println("文件名:" + file.getOriginalFilename());
System.out.println("文件大小:" + file.getSize());
String path = "E:/" + file.getOriginalFilename();
File uploadfile = new File(path);
// 保存文件
file.transferTo(uploadfile);
return "success";
}
2.使用HttpServletRequest接收页面所传导的文件
@RequestMapping("/fileupload2")
public String fileUpload2(HttpServletRequest request) throws IllegalStateException, IOException {
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
request.getSession().getServletContext());
if (multipartResolver.isMultipart(request)) {
// 将request变成多部分request
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
// 获取multiRequest 中所有的文件名
Iterator iter = multiRequest.getFileNames();
while (iter.hasNext()) {
MultipartFile file = multiRequest.getFile(iter.next().toString());
if (file != null) {
System.out.println("文件名:" + file.getOriginalFilename());
System.out.println("文件大小:" + file.getSize());
// 保存文件
Date date = new Date();
File saveFile = new File("E:/" + file.getOriginalFilename());
file.transferTo(saveFile);
}
}
}
return "success";
}
页面上传文件
<form action="fileupload1" method="post" enctype="multipart/form-data">
<input type="file" name="file"> <input type="submit">
</form>
<hr>
<form action="fileupload2" method="post" enctype="multipart/form-data">
<input type="file" name="file"> <input type="submit">
</form>
在springmvc的文件中新增多部分文件上传的bean
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="104857600" />
<property name="maxInMemorySize" value="4096" />
<property name="defaultEncoding" value="UTF-8"></property>
</bean>
文件下载
采用ResponseEntity
@RequestMapping("/download")
public ResponseEntity<byte[]> export() throws IOException {
//需要下载的文件
String filePath = "F:\\new.txt";
File file = new File(filePath);
//HTTP消息头,设置HttpHeaders,使得浏览器响应下载
HttpHeaders headers = new HttpHeaders();
// 设置响应方式
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
// 设置响应文件
headers.setContentDispositionFormData("attachment", file.getName());
//返回二进制文件
return new ResponseEntity<byte[]>(org.apache.commons.io.FileUtils.readFileToByteArray(file), headers,
HttpStatus.CREATED);
}
文件下载链接
<a href="download" target="_blank" rel="external nofollow" >下载</a>
总结
文件保存到磁盘的某个路径,可以使用CommonsMultipartFile的transferTo方法,也可以使用io流进行保存。
文件下载可以使用ResponseEntity,使用commons.io.FileUtils的类对文件进行操作,可以使用io对文件进行操作。