前言
使用commons-fileupload , commons-io 工具,实现上传、下载功能
1、环境搭建
1.1、导入依赖包
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.4</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-io/commons-io --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.11.0</version> </dependency>
1.2、配置文件
<!--配置文件上传解析器--> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!--设置上传文件的默认编码格式--> <property name="defaultEncoding" value="UTF-8"></property> <!--设置允许上传的最大长度--> <property name="maxUploadSize" value="1024000"></property> </bean> <!--静态资源文件路径--> <mvc:resources mapping="/uploadfile/**" location="/uploadfile/"/>
属性 | 说明 |
defaultEncoding | 上传文件的默认编码格式。 |
maxUploadSize | 上传文件的最大长度(单位为字节)。 |
maxInMemorySize | 读取文件到内存中的最大字节数。 |
resolveLazily | 判断是否要延迟解析文件。 |
2、上传功能实现
2.1、html页面
<form th:action="@{/uploadfile}" method="post" enctype="multipart/form-data"> <input type="file" name="file" multiple="multiple"/> <input type="submit" value="上传"/> </form>
2.2、controller
@PostMapping("/uploadfile") public String uploadfile(MultipartFile file,HttpServletRequest request){ if(!file.isEmpty()){ //原始文件名 String originalFilename = file.getOriginalFilename(); //文件扩展名 String fileType = originalFilename.substring(originalFilename.lastIndexOf(".")); //获取上传文件的路径 String realPath = request.getServletContext().getRealPath("/uploadfile/"); //创建上传文件的路径 File f = new File(realPath); //判断文件夹是否存在 if(!f.exists()){ f.mkdir(); } //上传后的文件名 String newFileName = UUID.randomUUID() + fileType; //文件名传回前端 request.setAttribute("imgPath",request.getRequestURL()+"/" + newFileName); try { //持久化文件 file.transferTo(new File(realPath+newFileName)); } catch (IOException e) { e.printStackTrace(); } } return "success"; }
3、下载功能实现
@RequestMapping("/downloadFile") public ResponseEntity<byte[]> downloadFile(HttpServletRequest request,String fileName) throws IOException { fileName = fileName.substring(fileName.lastIndexOf("/") + 1); //得到图片的实际路径 String realFile = request.getServletContext().getRealPath("/uploadfile/") + fileName; File file = new File(realFile); byte[] bytes = FileUtils.readFileToByteArray(file); //创建 HttpHeaders 对象设置响应头信息 HttpHeaders headers = new HttpHeaders(); //设置下载的方式和文件名称 headers.setContentDispositionFormData("attachment",fileName); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); return new ResponseEntity<>(bytes, headers, HttpStatus.OK); }
<a th:href="@{/downloadFile(fileName=${imgPath})}">下载</a>