关于使用MulitpartFile的问题。
1.背景
在接口中前端会传过来MulitpartFile类型的图片,然后在后端接口中需要将图片上传至OSS服务器,因为上传至OSS服务器是一个不确定且耗时的工作,所以 想法是通过Event将上传操作交给Listener异步解决
2.MultipartFile类简介以及使用
首先MultipartFile类是Spring框架下的一个类,没有Spring的情况下就无法使用。一般来讲使用MultipartFile这个类主要是用来实现以表单的形式进行文件上传功能
最重要的一点是MultipartFile的文件在请求结束后会被清理掉
所以说像如上异步去操作话就需要在接口返回前先将图片复制到本地。
File[] files=new File[orderQO.getFiles().length];
int i=0;
for(MultipartFile file:orderQO.getFiles()){
File localFile=File.createTempFile("temp"+i,null);
file.transferTo(localFile);
files[i++]=localFile;
}
而如果没有保存到本地且有其他线程还在操作的话(我的例子是原接口准备返回,但是Listener异步线程还在处理MulitpartFile文件)会导致如下错误
意思是无法删除临时文件
3.处理完之后记得清理本地文件
@Cleanup
InputStream inputStream=new FileInputStream(file);
try{
PutObjectResult result = ossClient.putObject(aliyunConfig.getBucketName() , path, inputStream);
if (result != null) {
return true;
}
return false;
}catch(Exception e){
return false;
}finally{
file.deleteOnExit();
}