java - java中的多部分文件上传检查mime类型

标签 java spring-mvc file-upload mime-types

我正在使用 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

此外,您可以尝试以下方法之一:

  1. 上传前压缩文件,然后在服务器上解压缩并测试 mime 类型
  2. 通过可扩展的第三方解决方案上传,例如S3存储桶
  3. 重命名上传的文件,但在 header 或 URL 参数中发送文件名,并测试其 MIME 类型

关于java - java中的多部分文件上传检查mime类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50578314/

相关文章:

java - Google App Engine 远程 API

java - 使用 sessionAsSigner 打开 pdf 文件

并发 I/O 的 Java Socket 编程

java - 模式匹配器不适用于空白

java - Spring3, hibernate ;我如何使用 HibernateTemplate

spring - 有没有办法制作一个与多个不同组件共享的基本 spring-boot 组件?

reactjs - React + Firebase存储+文件上传和进度显示

silverlight - 与 Internet Explorer 兼容的多文件上传

java spring bean注册

JQuery 文件上传在单独的 Post 请求中发送每个文件?