Я создал контроллер для загрузки 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"));
Я непонять, где проблема и почему это не работает.Метод извлечения почтовых индексов отлично работает при тестировании через Почтальон.