Как проверить содержимое ZipFile перед сохранением на диск - PullRequest
2 голосов
/ 25 января 2012

У меня есть приложение, которое требует от пользователя загрузить zip-файл, содержащий файл отчета xml, среди других файлов.

Я хочу проверить, является ли это zip-файлом, затем открыть и проверить, есть лиXML-файл, и проверьте несколько узлов, которые требуются в этом XML.

Я хочу сделать это перед тем, как сохранить этот zip-файл на диск / файловую систему и не создать временный файл.Я сохраню файл, только если он пройдет проверку.

Я использую Spring multipart CommonsMultipartFile для управления загрузками.

Приложение использует Java, jsp, tomcat

Спасибо.

Ответы [ 2 ]

0 голосов
/ 25 января 2012

См. Мой комментарий на OP о мудрости буферизации всего файла в памяти.

Одна быстрая первая проверка на наличие действительного zip-файла состояла бы в проверке первых 4 байтов на наличие соответствующих "магических" байтов. ZIP-файл должен начинаться с первых 4 байтов {(byte)0x50, (byte)0x4b, (byte)0x03, (byte)0x04}. единственный способ действительно проверить это, однако, это попытаться распаковать его.

0 голосов
/ 25 января 2012

Если вы хотите проверить, является ли файл ZIP-файлом, возможно, вы можете использовать метод getContentType () класса URLConnection?Примерно так:

URL u = new URL(fileUrl);
URLConnection uc = u.openConnection();
String type = uc.getContentType();

Но было бы намного быстрее обнаружить магические байты , для формата ZIP 50 4B.

...