上传接口:
@PostMapping("/upload")
public AjaxResult<Map<String, String>> upload(@RequestPart("file") MultipartFile file) {
if (ObjectUtil.isNull(file)) {
throw new ServiceException("上传文件不能为空");
}
SysOss oss = iSysOssService.upload(file);
Map<String, String> map = new HashMap<>(2);
map.put("url", oss.getUrl());
map.put("fileName", oss.getFileName());
return AjaxResult.success(map);
}
上传接口的实现:
@Override
public SysOss upload(MultipartFile file) {
String originalfileName = file.getOriginalFilename();
String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length());
ICloudStorageStrategy storage = OssFactory.instance();
UploadResult uploadResult;
try {
uploadResult = storage.uploadSuffix(file.getBytes(), suffix, file.getContentType());
} catch (IOException e) {
throw new ServiceException(e.getMessage());
}
// 保存文件信息
SysOss oss = new SysOss()
.setUrl(uploadResult.getUrl())
.setFileSuffix(suffix)
.setFileName(uploadResult.getFilename())
.setOriginalName(originalfileName)
.setService(storage.getServiceType());
save(oss);
return oss;
}
在上传过程中我发现在本地上传没有问题,但是部署到服务器总是会报403的错误,经过排查发现是使用了nginx代理 client_max_body_size,client_max_body_size如果不设置的话,默认为1m。
解决办法:
在nginx的server中配置
client_max_body_size 8m;
client_body_buffer_size 128k;
fastcgi_intercept_errors on;
location / {
client_max_body_size 8m;
client_body_buffer_size 128k;
fastcgi_intercept_errors on;
root /html/dist;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
成功上传