【问题标题】:multipart file upload check mime type in javajava中的多部分文件上传检查mime类型
【发布时间】:2018-11-07 18:03:29
【问题描述】:

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

【问题讨论】:

  • 你应该提供一些例子。
  • 你可以检查代码,例如参考我的问题。谢谢
  • @OP:检查以下方法是否对您有帮助:1. MultipartFileObject.getContentType(), 2. MimeUtil.getMimeTypes(File file)
  • 1.这在将可执行文件 .exe 更改为 json 时不起作用。返回的 mime 类型是 json。 2. 已经使用了一个未知的 mimetype 来响应一个 json 文件。你知道任何其他方法来获得文件的确切 mimetype 吗?
  • MediaType 是另一种可能的部分比较。但是,您是否尝试过跟踪变量mimeTypes 中的确切内容。调试并查看else 部分比较。这可能会有所帮助。

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


【解决方案1】:

您的问题是java 中的 MIME 类型检查基于文件扩展名。

为了运行实际的文件分析尝试Apache Tika Mime Magic Detection

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

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

【讨论】:

  • Apache Tika 有很多依赖项,zip、unzip 部分不可行,因为使用了应用程序,使最终用户可以轻松上传文件,直接从本地上传到服务器,服务器上的文件被广泛使用.
  • 我给了你一个解释和几个可能的解决方案。你的反对是没有道理的。以编程方式实现 Tika 或压缩/解压缩文件并不难。
猜你喜欢
  • 2014-02-20
  • 2011-08-06
  • 2011-06-03
  • 2021-08-09
  • 2011-02-13
  • 1970-01-01
相关资源
最近更新 更多