【问题标题】:Can't struts2 detect the content of a file? (Renaming extension trouble)struts2不能检测文件的内容吗? (重命名扩展麻烦)
【发布时间】:2017-08-05 03:50:51
【问题描述】:

我们有一个使用 struts2 完成的应用程序。我们将上传的文件限制为 microsoft 文档和 acrobat pdf。一切顺利。但是当用户更改文件的扩展名时,struts 2 无法检测到该更改并接受该文件。

例如 logo.png -> logo.pdf

我们在struts2文件中的配置是这样的:

<interceptor-ref name="interceptorFileStack">
            <param name="fileUpload.allowedTypes">application/pdf,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document</param>
            <param name="fileUpload.allowedExtensions">.pdf,.docx,.doc</param>
            <param name="fileUpload.maximumSize">4194304</param>
</interceptor-ref>

我以为allowedExtensions控制扩展名,allowedTypes控制文件内容...

无论如何,仅使用 struts 2 才能检测到扩展名的更改?或者我需要另一个图书馆?有什么推荐吗?

【问题讨论】:

    标签: java file upload struts2


    【解决方案1】:

    大多数情况下,浏览器发送的 MIME-Type 是由文件扩展名派生的。因此,重命名的 jpg->pdf 是“application/pdf”文件类型。

    如果您不能信任您的用户并且必须确认正确的数据类型,您必须使用 Apache TikaJHOVE 之类的东西

    Tika 的一个小例子是:

    Path path = Paths.get("myfile.txt");
    TikaConfig tika = new TikaConfig();
    Metadata metadata = new Metadata();
    metadata.set(Metadata.RESOURCE_NAME_KEY, path.toString());
    String mimetype = tika.getDetector().detect(TikaInputStream.get(path), metadata).toString();
    System.out.println("File " + path + " is " + mimetype);
    

    (来自tutorial

    JHOVE 主要是一个您可以使用的 gui/命令行工具,但也应该可以通过 API 使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-22
      • 2018-11-25
      • 1970-01-01
      • 2018-01-11
      • 1970-01-01
      • 1970-01-01
      • 2017-09-23
      • 2015-07-24
      相关资源
      最近更新 更多