适用于上传文件使用,不保存到本地磁盘。直接在内存中将上传的文件转换为File类型并保存在内存中。
适用案例:在Activiti工作流中,将本地的流程文件和流程图打包成ZIP文件上传至工作流系统部署。
整体思路:将上传文件的MultipartFile对象转换为CommonsMultipartFile对象,并获得上传文件的基本信息。然后创建一个zip格式的临时文件,并使用Apache的commons工具包中的FileUtils的copyInputStreamToFile将CommonsMultipartFile写入到新的临时zip文件中。
public void upload(MultipartFile resource) {
//将MultipartFile对象转换为CommonsMultipartFile对象
CommonsMultipartFile cf = (CommonsMultipartFile)resource;
//获取上传文件的信息
DiskFileItem fi = (DiskFileItem) cf.getFileItem();
//获取MultipartFile对象的文件信息
File file = fi.getStoreLocation();
//获取MultipartFile对象的文件全路径,包括文件名
String filePath = fi.getStoreLocation().getPath();
//截取MultipartFile对象文件路径,不包括文件名
int stringIndex=filePath.lastIndexOf("\\");
filePath=filePath.substring(0,stringIndex);
//创建一个新的临时文件,用于保存MultipartFile对象转换成File对象的内容
File bpmnFile = new File(filePath+File.separator+UUID.randomUUID()+".zip");
try {
//将MultipartFile转换成File对象
FileUtils.copyInputStreamToFile(resource.getInputStream(), bpmnFile);
} catch (IOException e) {
e.printStackTrace();
}
}
网友评论