文件上传是项目开发中最常见的功能之一 ,springMVC 可以很好的支持文件上传,但是SpringMVC上下文中默认没有装配MultipartResolver,因此默认情况下其不能处理文件上传工作。如果想使用Spring的文件上传功能,则需要在上下文中配置MultipartResolver。
文件上传
创建一个upload.html:
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
注意name "uploadFile" 一定要和后台一样
<form action="/upload/upload" method="post" enctype="multipart/form-data">
头像:<input type="file" name="uploadFile"><br/>
<input type="submit" value="提交">
</form>
</body>
</html>
配置文件上传解析器 :
<!--配置文件上传解析器-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--请求编码格式-->
<property name="defaultEncoding" value="utf-8"/>
<!--上传文件大小上限-->
<property name="maxUploadSize" value="1048576000"/>
<!--上传文件单个大小上限-->
<property name="maxUploadSizePerFile" value="10485760"/>
</bean>
控制层 controller
@Controller
@RequestMapping("/upload")
public class UploadController {
@RequestMapping("/upload")
@ResponseBody
public String upload(MultipartFile uploadFile, HttpServletRequest request){
String originalFilename=uploadFile.getOriginalFilename();//获取原始文件名称
System.out.println(originalFilename);
//目的仓库地址在项目内部
//String upload=request.getServletContext().getRealPath("upload");//存储文件的文件夹路径
//目的仓库地址在项目内部
String upload="D:\\upload";
System.out.println(upload);
//与目的地建立连接
File file=new File(upload);
if(!file.exists()){//判断是否存在,不存在创建
file.mkdirs();
}
//获取文件后缀名
String suffix=originalFilename.substring(originalFilename.lastIndexOf("."),originalFilename.length());
//构建文件上传具体路径
String filename=upload.concat(File.separator).concat(UUID.randomUUID().toString()).concat(suffix);
System.out.println(filename);
try {
//上传
uploadFile.transferTo(new File(filename));
return filename;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
文件下载
文件的下载与文件的上传其实并没与多大变化,唯一变化的就是Controller层
控制层 controller
/**
* 文件下载
* ResponseEntity进行返回的
*/
@RequestMapping("/download")
public ResponseEntity<byte[]> download(HttpServletRequest request,String filename){
//文件地址在项目内部的(目的地址信息)
//String upload=request.getServletContext().getRealPath("upload");
//目的仓库在项目之外
String upload="D:\\upload";
//先拼接具体的位置路径,然后通过file进行建立连接
File file=new File(upload+File.separator+filename);
if(!file.exists()){//如果不存在文件,直接返回null
return null;
}
try {
//创建标头文件对象
HttpHeaders headers=new HttpHeaders();
//解决乱码问题
String downloadfile=new String(filename.getBytes(StandardCharsets.UTF_8),"iso-8859-1");
//以下载的方式打开文件
headers.setContentDispositionFormData("attachment",filename);
//二进制流
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}