如何在Java中不对图像扩展进行硬编码



如何在Java中不对图像扩展进行硬编码?

switch(extension) {
case "zip" -> {
FileUtil.saveFile(multipartFile, historyFolder, FileType.ZIP, backupFilePath);
FileUtil.saveFile(multipartFile, target, FileType.ZIP, filePath);
}
case "jpg", "jpeg", "png", ".bmp", ".svg", "webp", "jfif", "pjpeg", "pjp", "apng", "avif" -> {
FileUtil.saveFile(multipartFile, historyFolder, FileType.IMAGE, backupFilePath);
FileUtil.saveFile(multipartFile, target, FileType.IMAGE, filePath);
}
default -> throw new GlobalCustomException(ErrorCode.ILLIGAL_FILE_TYPE);
}

上面是我的代码。

在case语句中,我列出了硬编码为jpg、jpeg…的字符串。。。。

这个代码不灵活,所以我相信一定有更好的方法。

如果你能给我一个我不知道的解决方案,我将不胜感激。

作为一种可能的方法,您可以这样使用URLConnection.guessContentTypeFromName()

String mimeType = java.net.URLConnection.guessContentTypeFromName("test." + extension);
boolean isImage = mimeType != null && mimeType.startWith("image/")

您可以向$JAVA_HOME/jre/lib/content-types.properties文件添加自定义扩展名。

另请参阅这些问题。

  • 如何获取文件的媒体类型(MIME类型(
  • 如何可靠地检测文件类型

也许您可以尝试使用带有扩展的数组并传入case语句。将所有图像格式作为单个数组元素,将zip格式作为另一个数组元素。

这应该给出最接近的逻辑。https://stackoverflow.com/a/46700392/20191548

试试是否有效

String extension = "";
int i = fileName.lastIndexOf('.');
if (i > 0) {
extension = fileName.substring(i+1);
}
extension=fileName.substring(0,i)+"."+extension;
FileUtil.saveFile(multipartFile, historyFolder, extension, backupFilePath); 
FileUtil.saveFile(multipartFile, target, extension, filePath);