上传文件后,需要获取文件相关信息
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.fileupload.disk.DiskFileItem;
import org.apache.commons.io.IOUtils;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import java.io.*;
import java.util.UUID;
/**
* IM 文件工具类
* @author xxx
*/
@Slf4j
public class FileUtils {
/**
* 将 MultipartFile 转换为 File
* @param multipartFile 要转换的 MultipartFile
* @return 转换后的 File 对象
* @throws IOException 如果文件操作失败
*/
public static File convertMultipartFileToFile(MultipartFile multipartFile) {
FileOutputStream fos = null;
try {
// 创建临时文件
File tempFile = File.createTempFile("upload_", null);
// 将 MultipartFile 的内容写入临时文件
fos = new FileOutputStream(tempFile);
fos.write(multipartFile.getBytes());
return tempFile;
} catch (IOException e) {
log.error("Failed to convert MultipartFile to File", e);
} finally {
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
/**
* 将 File 转换为 CommonsMultipartFile
* @param file
* @param fieldName
* @param contentType
* @return
* @throws IOException
*/
public static CommonsMultipartFile convertFileToCommonsMultipartFile(File file, String fieldName, String contentType) throws IOException {
return convertFileToCommonsMultipartFile(file, file.getName(), fieldName, contentType);
}
/**
* 指定文件名、表单字段名、文件类型,将 File 转换为 CommonsMultipartFile
* @param file
* @param fileName 指定文件名
* @param formFieldName 表单字段名
* @param contentType 文件类型
* @return
* @throws IOException
*/
public static CommonsMultipartFile convertFileToCommonsMultipartFile(File file, String fileName, String formFieldName, String contentType) throws IOException {
boolean isFormField = true;
log.info("fieldName:{}, fileName:{}", formFieldName, fileName);
// Create DiskFileItem instance
DiskFileItem fileItem = new DiskFileItem(formFieldName, contentType, isFormField, fileName, (int) file.length(), file.getParentFile());
// Copy file content to DiskFileItem
try (InputStream input = new FileInputStream(file);
OutputStream os = fileItem.getOutputStream()) {
IOUtils.copy(input, os);
}
// Create CommonsMultipartFile from DiskFileItem
return new CommonsMultipartFile(fileItem);
}
public static void main(String[] args) {
System.out.println(getFileSizeStr(5340628));
System.out.println(getFileSizeStr(36433));
System.out.println(getFileSizeStr(6423));
System.out.println(getFileSizeStr(8961840));
}
public static String getFileSizeStr(long fileSize) {
if(fileSize <= 0) {
return "未知大小";
}
if (fileSize < 1024) {
return fileSize + " B";
} else if (fileSize < 1024 * 1024) {
return String.format("%.2f KB", fileSize / 1024.0);
} else if (fileSize < 1024 * 1024 * 1024) {
return String.format("%.2f MB", fileSize / (1024.0 * 1024));
} else {
return String.format("%.2f GB", fileSize / (1024.0 * 1024 * 1024));
}
}
}