文件上传
文件上传功能是so-fast内置功能,推荐用于较小文件上传,对于大文件并没有做切片和多线程的优化。
文件上传功能仅提供本地文件存储或NFS文件存储,目前不支持对象存储。
so-fast框架内置了BaseFileController
用于所有文件上传的操作。
文件上传分类
so-fast框架推荐将上传的文件进行分类,并内置了对应的api进行处理:
头像上传:/file/upload/avatar:
头像上传专用于个人中心的头像处理,仅支持单文件上传。
图片上传:/file/upload/image:
图片上传用于所有图片类型的文件上传,有图片类型的检查,方便专用于图片的上传业务。
文件上传:/file/upload:
文件上传是通用的上传,支持大多数类型文件(可配置)。
ps:当然,也可以不进行分类,统一使用某一种或某两种api进行上传。视业务而定
@Value("${sofast.file.avatarPath}")
private String avatarPath;
@Value("${sofast.file.imagePath}")
private String imagePath;
@Value("${sofast.file.filePath}")
private String filePath;
@ApiOperation(value = "头像上传")
@PostMapping("/file/upload/avatar")
public R uploadAvatar(@RequestParam("file") MultipartFile file) throws IOException {
// 获取文件存储的根目录
return R.data(SolFileUtils.uploadImage(file, avatarPath));
}
@ApiOperation(value = "图片上传")
@PostMapping(value = "/file/upload/image", headers = "Content-Type=multipart/form-data")
public R uploadPicture(@RequestParam("files") MultipartFile[] files) throws IOException {
// 获取文件存储的根目录
return R.data(SolFileUtils.uploadImages(files, imagePath));
}
@ApiOperation(value = "文件上传,支持所有的文件格式")
@PostMapping(value = "/file/upload", headers = "Content-Type=multipart/form-data")
public R upload(@RequestParam("files") MultipartFile[] files) throws IOException {
// 获取文件存储的根目录
return R.data(SolFileUtils.uploadFiles(files, filePath));
}
上传路径配置
文件上传需要配置上传的目录,根据api分类,so-fast也提供了3个文件目录配置项,可分类使用,也可使用其中某一个。
sofast:
file:
# 头像存储路径
avatarPath: /Users/yyq/Downloads/sofast/avatar/
# 图片文件上传路径
imagePath: /Users/yyq/Downloads/sofast/images/
# 文件上传路径
filePath: /Users/yyq/Downloads/sofast/files/
上传文件大小配置
文件上传时,一般前后端都会有文件大小的限制与检查。在后台可通过配置文件灵活调整文件size限制:
spring:
# 文件上传
servlet:
multipart:
# 单个文件大小
max-file-size: 10MB
# 设置总上传的文件大小
max-request-size: 200MB
文件上传超时问题
文件上传超时问题可能是常见问题,需要根据业务中文件的最大size进行计算后,配置一个相对合理的超时时间。
涉及超时时间的有:
前台vue部分,发送上传请求时有timeout参数
后台服务部分,接口的timeout参数
spring:
mvc:
async:
# 超时时间
request-timeout: 25000
如果有代理服务器,例如nginx,那么针对文件上传也要配置一些nginx参数。