文件存储服务

This commit is contained in:
jiang 2024-06-26 10:42:23 +08:00
parent 166a36c7b6
commit 1a28e6f0b4
1 changed files with 54 additions and 0 deletions

View File

@ -8,10 +8,15 @@ import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.ArrayUtils;
import com.bonus.common.core.utils.StringUtils;
import org.springframework.web.multipart.MultipartFile;
/**
* 文件处理工具类
@ -250,4 +255,53 @@ public class FileUtils
String encode = URLEncoder.encode(s, StandardCharsets.UTF_8.toString());
return encode.replaceAll("\\+", "%20");
}
/**
* 生成统一格式的文件名
* 格式为uploads/yyyy/MM/dd/fileName
*
* @param fileName 原始文件名
* @return 生成的文件名
*/
public static String generateObjectName(String fileName) {
// 生成安全的文件名例如使用UUID加上原始文件扩展名
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
String datePath = sdf.format(new Date());
return "uploads/" + datePath + "/" + fileName;
}
/**
* 从文件路径中提取文件名
*
* @param filePath 文件路径
* @return 文件名
*/
public static String getFileNameFromPath(String filePath) {
Path path = Paths.get(filePath);
return path.getFileName().toString();
}
/**
* 将MultipartFile转换为File对象
* 在临时目录中创建文件并将上传文件内容写入
*
* @param multiFile MultipartFile对象
* @return 转换后的File对象如果转换失败返回null
*/
public static File multipartFileToFile(MultipartFile multiFile) {
try {
String fileName = multiFile.getOriginalFilename();
if (fileName == null) {
return null;
}
String prefix = fileName.substring(0, fileName.lastIndexOf("."));
String suffix = fileName.substring(fileName.lastIndexOf("."));
File file = File.createTempFile(prefix, suffix);
multiFile.transferTo(file);
return file;
} catch (Exception e) {
return null;
}
}
}