指定路径存储MultipartFile文件
/**
* 指定路径存储MultipartFile文件
* @param file
* @param targetDirPath 存储MultipartFile文件的目标文件夹
* @return 文件的存储的绝对路径
*/
public static String saveMultipartFile(MultipartFile file, String targetDirPath){
File toFile = null;
if (file.equals("") || file.getSize() <= 0) {
return null;
} else {
/*获取文件原名称*/
String originalFilename = file.getOriginalFilename();
System.out.println(originalFilename);
toFile = new File(targetDirPath + File.separator + originalFilename);
String absolutePath = null;
try {
absolutePath = toFile.getCanonicalPath();
/*判断路径中的文件夹是否存在,如果不存在,先创建文件夹*/
String dirPath = absolutePath.substring(0, absolutePath.lastIndexOf(File.separator));
File dir = new File(dirPath);
if (!dir.exists()) {
dir.mkdirs();
}
InputStream ins = file.getInputStream();
inputStreamToFile(ins, toFile);
ins.close();
} catch (IOException e) {
e.printStackTrace();
}
return absolutePath;
}
}
private static void inputStreamToFile(InputStream ins, File file) {
try {
OutputStream os = new FileOutputStream(file);
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
os.write(buffer, 0, bytesRead);
}
os.close();
ins.close();
} catch (Exception e) {
e.printStackTrace();
}
}
File转MultipartFile
/**
* File转MultipartFile
* @param file
* @return
*/
public static MultipartFile getMultipartFile(File file) {
FileItem item = new DiskFileItemFactory().createItem("file"
, MediaType.MULTIPART_FORM_DATA_VALUE
, true
, file.getName());
try (InputStream input = new FileInputStream(file);
OutputStream os = item.getOutputStream()) {
// 流转移
IOUtils.copy(input, os);
} catch (Exception e) {
throw new IllegalArgumentException("Invalid file: " + e, e);
}
return new CommonsMultipartFile(item);
}
MultipartFile 转换为 File 文件
这里调用File.createTempFile(originalFilename, prefix) 去创建临时文件
源码中会自动在文件名后面加一串唯一性随机码来区分文件名以防重名
这是为了安全着想
如果你不想要那串随机码就要原本设定好的文件名
可以将下面的注释放开,用copy方法完成
/**
* MultipartFile 转换为 File 文件
*
* @param multipartFile
* @return
*/
public final static File transferToFile(MultipartFile multipartFile) {
//选择用缓冲区来实现这个转换即使用java 创建的临时文件 使用 MultipartFile.transferto()方法 。
File file = null;
String prefix = null;
try {
String originalFilename = multipartFile.getOriginalFilename();
//获取文件后缀
prefix = originalFilename.substring(originalFilename.lastIndexOf("."));
file = File.createTempFile(originalFilename, prefix); //创建临时文件
/*
String defaultTempBaseDir = FileUploadUtils.getDefaultTempBaseDir();
File newFile = new File(defaultTempBaseDir, originalFilename + prefix);
// 构建目标文件路径
Path destinationFilePath = new File(defaultTempBaseDir, originalFilename + prefix).toPath();
// 复制文件并修改文件名
Files.copy(file.toPath(), destinationFilePath, StandardCopyOption.REPLACE_EXISTING);
*/
multipartFile.transferTo(file);
// multipartFile.transferTo(newFile);
//删除
file.deleteOnExit();
// newFile .deleteOnExit();
} catch (IOException e) {
e.printStackTrace();
}
return file;
}