依赖
<dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.3</version>
</dependency>
<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version>
</dependency>
xml配置
<!--文件上传配置-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><!--请求的编码格式,必须和jsp的pageEncoding属性一致--><property name="defaultEncoding" value="utf-8"/><!--上传文件最大字节数,10M--><property name="maxUploadSize" value="10485760"/><property name="maxInMemorySize" value="40960"/>
</bean>
controller
@RestController
public class FileController {// 文件上传,从请求中读取文件路径@RequestMapping("/upload")// @RequestParam("file")会将name=file的控件上传的文件封装为CommonsMultipartFile对象,数组实现批量上传public String uploadFile(@RequestParam("file") CommonsMultipartFile file, HttpServletRequest request) throws IOException {String filename = file.getOriginalFilename();if ("".equals(filename)){return "redirect:/index.jsp";}// 上传路径保存设置String realPath = request.getServletContext().getRealPath("/upload");File realFile = new File(realPath);if (!realFile.exists()){realFile.mkdir();}// out/artifacts/SSM_war_exploded/uploadFileSystem.out.println(realFile);// 文件读写file.transferTo(new File(realFile + "/" + filename));return "redirect:/index.jsp";}// 文件下载,写入响应输出流@RequestMapping("/downLoad")public String downLoadFile(HttpServletRequest request, HttpServletResponse response) throws Exception {// 要下载的文件地址String realPath = request.getServletContext().getRealPath("/uploadFile");String fileName = "test.txt";// 设置响应头response.reset();// 清空缓存response.setCharacterEncoding("UTF-8");// 设置字符编码response.setContentType("multipart/form-data");// 二进制传输数据response.setHeader("Content-Disposition","attachment;fileName=" + URLEncoder.encode(fileName,"UTF-8"));// 文件读写InputStream in = new FileInputStream(new File(realPath,fileName));OutputStream out = response.getOutputStream();int len = 0;byte[] buffer = new byte[1024];while ((len=in.read(buffer)) != -1){out.write(buffer,0,len);out.flush();}out.close();in.close();return "ok";}
}