我正在使用 mimeutil 来检查文件的 mimetype。 并且只允许 csv 和 json 文件。但是获取 json 文件的 mimetype “application/x-ipynb+json”mime 类型找不到。如果还将 exe 文件重命名为 json(出于安全原因不应允许),我们将不胜感激,以获取文件的确切 mime 类型。 引用以下代码:
public static String verifyExtension(MultipartFile File){
String mimeType = null;
MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.MagicMimeMimeDetector");
MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.ExtensionMimeDetector");
//MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.OpendesktopMimeDetector");
MimeUtil.registerMimeDetector(System.getProperty("os.name").startsWith(
"Windows") ? "eu.medsea.mimeutil.detector.WindowsRegistryMimeDetector"
: "eu.medsea.mimeutil.detector.OpendesktopMimeDetector");
Collection<?> mimeTypes = null;
try {
mimeTypes = MimeUtil.getMimeTypes(File.getBytes());
if(mimeTypes.equals("application/vnd.ms-excel") || mimeTypes.equals("application/json")
|| mimeTypes.equals("application/octet-stream"))
{
System.out.println("File typ is csv or json");
mimeType = "success";
}else{
mimeType = "fail";
}
} catch (MimeException e1) {
System.out.println(e1.getMessage());
mimeType = "fail";
} catch (IOException e1) {
System.out.println(e1.getMessage());
mimeType = "fail";
}
}
最佳答案
您的问题是 MIME 类型检查 java基于文件扩展名。
为了运行实际的文件分析,请尝试 Apache Tika Mime Magic Detection 。
此外,您可以尝试以下方法之一:
- 上传前压缩文件,然后在服务器上解压缩并测试 mime 类型
- 通过可扩展的第三方解决方案上传,例如S3存储桶
- 重命名上传的文件,但在 header 或 URL 参数中发送文件名,并测试其 MIME 类型
关于java - java中的多部分文件上传检查mime类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50578314/