文件上传下载是web服务经常使用的功能。但实际使用过程中,也有一些需要注意的地方。本文结合实际代码说明一下。
1.添加maven依赖:
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
2.单个文件上传。即将本地的文件以流的方式写入到服务器的一个目录下。
@RequestMapping(value = "/fileUpload", method = RequestMethod.POST)
@ApiOperation(value = "附件上传", notes = "附件上传")
public ResultDto fileUpload(@ApiParam(value = "附件") @RequestParam("file") MultipartFile file) {
return fileService.fileUpload(file );
}
fileService里的关键代码(使用郑国龙提供的文件服务):
项目原因不贴了。或者晚点贴
注意事项:1.为了防止同名文件被覆盖。每个文件必须有对应的UUID生成的文件名,作为上传文件名。
2.注释1处,在springboot程序里面,在application.properties里配置或者不配置:server.tomcat.uri-encoding=UTF-8 1处都可以获取正常的中文文件名。但是在springcloud的工程里,配置了server.undertow.uri-encoding=UTF-8并没有起作用,而使用注释2就可以正常的获取中文文件名。
3.使用注释2获取中文文件名后。本地server正常。但是通过网关处理请求的时候,上传之后中文文件名依然是乱码。参考官方文档。对于文件处理类,请求之前加上/zuul/xxxx就可以解决此问题,http://cloud.spring.io/spring-cloud-static/Dalston.SR1/#_uploading_files_through_zuul本来是为了解决上传大文件的,发现中文乱码问题也可以解决。
4.上传文件要控制文件的大小,通过配置
spring.http.multipart.max-file-size=10Mb
spring.http.multipart.max-request-size=10Mb
或者
spring.servlet.multipart.