Java Can';t struts2是否检测文件的内容?(重命名扩展故障)

Java Can';t struts2是否检测文件的内容?(重命名扩展故障),java,file,upload,struts2,Java,File,Upload,Struts2,我们用struts2完成了一个应用程序。我们将上传的文件限制为microsoft文档和acrobat pdf。一切顺利。但是,当用户更改文件扩展名时,struts 2无法检测到该更改并接受该文件 例如logo.png->logo.pdf 我们在struts2文件中的配置如下: <interceptor-ref name="interceptorFileStack"> <param name="fileUpload.allowedTypes">app

我们用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>

application/pdf、application/msword、application/vnd.openxmlformats-officedocument.wordprocessingml.document
.pdf、.docx、.doc
4194304
我认为allowedExtensions控制扩展名,并允许键入文件的内容


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

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

如果您不能信任您的用户,并且必须确认正确的数据类型,则必须使用或之类的方法

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);
(摘自)

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