struts2无法检测文件的内容吗? (重命名扩展麻烦)

时间:2017-03-14 17:06:57

标签: java file upload struts2

我们已经完成了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控制扩展名,allowTypes文件的内容......

无论如何只用struts 2来检测扩展的变化?或者我需要另一个图书馆?有什么建议吗?

1 个答案:

答案 0 :(得分:3)

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

如果您无法信任您的用户并且必须确认正确的数据类型,则必须使用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使用它。