Java - скачанный ZIP-архив с S3 поврежден

Я пытаюсь загрузить ZIP-архив из корзины S3, используя этот код:

S3Object fullObject = client.getObject(bucketName, key);
S3ObjectInputStream stream = fullObject.getObjectContent();

FileOutputStream outputStream = new FileOutputStream(archiveName);

while ((count = stream.read(data)) != -1) {
    outputStream.write(data, 0, count);
}

outputStream.close();
stream.close();

Файл загружается, его размер примерно такой же, как и в S3, единственная проблема в том, что он поврежден. Если я наберу unzip -t <archive_name.zip>, я получаю следующую ошибку:

End-of-central-directory signature not found. Either this file is not a zipfile, or it constitutes one disk of a multi-part archive. In the latter case the central directory and zipfile comment will be found on the last disk(s) of this archive. unzip: cannot find zipfile directory in one of PCxazGHgMmDedx8wNM16L.zip or PCxazGHgMmDedx8wNM16L.zip.zip, and cannot find PCxazGHgMmDedx8wNM16L.zip.ZIP, period.

Я пробовал использовать ZipOutputStream, заявленный так:

ZipOutputStream zipStream = new ZipOutputStream(new BufferedOutputStream(outputStream));

но для этого требуется ZipEntry, который в основном представляет собой новый файл / каталог внутри архива, который я не вижу, потому что у меня есть только поток.

Как я могу решить эту проблему?

С уважением, спасибо.

Удалось ли вам убедиться, что исходный zip-файл поврежден (или не поврежден)?

Stultuske 04.06.2018 14:36

Да, если я загружу исходный zip-файл вручную, все в порядке

Cosmin Ioniță 04.06.2018 14:36

Кроме того, если я хочу разархивировать его, дважды щелкнув по нему (в Finder), он работает

Cosmin Ioniță 04.06.2018 14:38

Вы можете проверить метаданные объектов, если они подходят для этого объекта objectMetadata.getRawMetadata().

SubOptimal 04.06.2018 15:27

Также может быть, что файл не является файлом ZIP, а может быть файлом Gzip. Это может быть раскрыто в метаданных.

SubOptimal 04.06.2018 15:57

Я понимаю. Я это проверю

Cosmin Ioniță 04.06.2018 16:22

Не могли бы вы решить вашу проблему?

SubOptimal 05.06.2018 15:35

Да, я по ошибке создавал ZIP-архив с помощью TarEntries. Это правильно управлялось Finder (он как-то справляется с этой ситуацией). Теперь это работает. Спасибо!

Cosmin Ioniță 05.06.2018 16:08
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
8
739
0

Другие вопросы по теме