我有一个应用程序需要用户上传一个包含 xml 报告文件以及其他文件的 zip 文件。
我想要做的是,验证它是一个 zip,然后打开并检查是否有一个 xml 文件,并验证该 xml 中需要的一些节点。
我想在将此 zipfile 保存到磁盘/文件系统之前执行此操作,并且无需创建临时文件。如果文件通过验证,我只会保存文件。
我正在使用 Springmultipart CommonsMultipartFile
来管理上传。
该应用程序正在使用 Java、jsp、tomcat
谢谢。
我有一个应用程序需要用户上传一个包含 xml 报告文件以及其他文件的 zip 文件。
我想要做的是,验证它是一个 zip,然后打开并检查是否有一个 xml 文件,并验证该 xml 中需要的一些节点。
我想在将此 zipfile 保存到磁盘/文件系统之前执行此操作,并且无需创建临时文件。如果文件通过验证,我只会保存文件。
我正在使用 Springmultipart CommonsMultipartFile
来管理上传。
该应用程序正在使用 Java、jsp、tomcat
谢谢。
请参阅我对 OP 的评论,了解在内存中缓冲整个文件的智慧。
对有效 zip 文件的快速第一次检查是检查前 4 个字节是否有适当的“魔术”字节。一个 zip 文件应该从前 4 个字节开始{(byte)0x50, (byte)0x4b, (byte)0x03, (byte)0x04}
。然而,真正检查它的唯一方法是尝试解压缩它。
如果要检查文件是否为 ZIP 文件,也许可以使用URLConnection
该类的 getContentType() 方法?像这样的东西:
URL u = new URL(fileUrl);
URLConnection uc = u.openConnection();
String type = uc.getContentType();
但是检测魔术字节会快得多,对于 ZIP 格式,魔术字节是50 4B
.