在Java中测试zip文件的上传会抛出EOFException

时间:2018-10-15 15:50:24

标签: java zip multipart zipfile

我制作了用于上传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的方法效果很好。

1 个答案:

答案 0 :(得分:0)

我只能建议检查一些在使用文件系统时遇到的常见陷阱,因为我现在看不到您的实现中有明显的错误:

  • 检查是否未发生文件删除,尤其是在获取流和getNextEntry之间。
  • 检查您是否具有相应的访问权限/权限。
  • 检查文件是否正在被其他人使用,例如 打开某个地方或以其他方式访问(!)
  • 获取zip本身,查看其是否正确打开,也许在数据传输过程中已损坏

这些是我在某些时候遇到的问题。