最近进行restapi上传文件接口开发,在上传文件类型的时候,遇到了在本地可以正常使用,项目部署到linux上时又无法使用的情况,解决如下:
/**
* MultipartFile 转 File
* @param file
* @throws Exception
*/
public static void multipartFileToFile( @RequestParam MultipartFile file ) throws Exception {
File toFile = null;
if(file.equals("")||file.getSize()<=0){
file = null;
}else {
InputStream ins = null;
ins = file.getInputStream();
toFile = new File(file.getOriginalFilename());
inputStreamToFile(ins, toFile);
ins.close();
}
}
开发时发现,该方法只在windows下可正常使用,项目部署到linux上后使用就有问题了
/**
* File 转 MultipartFile(仅windows)
* @param file
* @throws Exception
*/
public static MultipartFile fileToMultipartFile(File file) throws Exception {
MultipartFile multipartFile = null;
try {
FileInputStream input = new FileInputStream(file);
multipartFile = new MockMultipartFile("file", file.getName(), "text/plain", IOUtils.toByteArray(input));
} catch (Exception e) {
e.printStackTrace();
}
return multipartFile;
}
该方法兼容windows和linux(推荐使用)
/**
* File 转 MultipartFile2(该方法兼容windows和linux)
* @param picPath
* @return
*/
public static MultipartFile getMulFileByPath(String picPath) {
FileItem fileItem = createFileItem(picPath);
MultipartFile mfile = new CommonsMultipartFile(fileItem);
return mfile;
}
public static FileItem createFileItem(String filePath) {
File file=new File(filePath);
FileItemFactory factory = new DiskFileItemFactory(16, null);
String textFieldName = "file";
int num = filePath.lastIndexOf(".");
String extFile = filePath.substring(num);
FileItem item = factory.createItem(textFieldName, "text/plain", true, file.getName());
File newfile = new File(filePath);
int bytesRead = 0;
byte[] buffer = new byte[8192];
try {
FileInputStream fis = new FileInputStream(newfile);
OutputStream os = item.getOutputStream();
while ((bytesRead = fis.read(buffer, 0, 8192)) != -1) {
os.write(buffer, 0, bytesRead);
}
os.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
return item;
}