Тестирование загрузки zip-файлов в java-запросы EOFException - PullRequest
0 голосов
/ 15 октября 2018

Я создал контроллер для загрузки zip-файлов, и когда я тестировал его через Postman, все работало как задумано.

Теперь я пытаюсь создать тест для этого контроллера, используя пользовательскую среду тестирования.

Часть моего метода контроллера для извлечения zip:

 try (final ZipInputStream zis = new ZipInputStream(file.getInputStream())) {
            byte[] buffer = new byte[1024];
            ZipEntry entry;
// until here everything works, next line throws EOFException
            while ((entry = zis.getNextEntry()) != null) {
                String entryName = entry.getName();
                StringBuilder stringBuilder = new StringBuilder();

                int read;

                while ((read = zis.read(buffer, 0, buffer.length)) != -1) {
                    stringBuilder.append(new String(buffer,0, read ));
                }

            }
        } catch (IOException e) {
            throw new GeneralServerException(e);
        }

Все прекрасно работает до строки: ((entry = zis.getNextEntry ())! = Null):

Caused by: java.io.EOFException
    at java.util.zip.ZipInputStream.readFully(ZipInputStream.java:405) ~[?:1.8.0_181]
    at java.util.zip.ZipInputStream.readLOC(ZipInputStream.java:321) ~[?:1.8.0_181]
    at java.util.zip.ZipInputStream.getNextEntry(ZipInputStream.java:122) ~[?:1.8.0_181]
    ... 81 more

И это часть моего класса для создания многочастного запроса:

    private static final String FILE_PART_PATTERN = "\r\nContent-Disposition: form-data; name=\"file\"; filename=\"%s\";\r\nContent-Type: application/zip\r\n\r\n%s\r\n--";


        @Override
        public String getValue() {
            try {
                String fileContent = IOUtils.toString(getInputStream());
                String rawPart = String.format(FILE_PART_PATTERN, getName(), fileContent);
                return rawPart;
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }

И вот как я создаю файловую часть многочастного запроса в тесте:

FilePart file = new FilePart("file", getClass().getResourceAsStream("/user_agreements.zip"));

Я непонять, где проблема и почему это не работает.Метод извлечения почтовых индексов отлично работает при тестировании через Почтальон.

1 Ответ

0 голосов
/ 15 октября 2018

Я могу только порекомендовать проверить пару вещей, которые были обычными ловушками, с которыми я столкнулся при работе с файловыми системами, так как сейчас я не вижу явной ошибки в вашей реализации:

  • Проверьте, нет ли удаления файлапроизошло, особенно между получением потока и getNextEntry.
  • Проверьте, есть ли у вас соответствующие права доступа / разрешения.
  • Проверьте, не используется ли файл чем-то другим, например открыть где-нибудь или получить доступ другим способом (!)
  • Получить сам zip-архив и посмотреть, правильно ли он открывается, возможно, он был поврежден при передаче данных

С этими проблемами я лично столкнулсяв тот или иной момент.

...