我制作了用于上传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"));
我不明白问题出在哪里以及为什么这行不通。通过Postman进行测试时,提取zip的方法效果很好。
答案 0 :(得分:0)
我只能建议检查一些在使用文件系统时遇到的常见陷阱,因为我现在看不到您的实现中有明显的错误:
getNextEntry
之间。这些是我在某些时候遇到的问题。