用Java保存HTTP实体ZIP响应



我正在测试一个框架,在该框架中,我通过HTTPGet下载zip文件。为此,我使用Apache HttpClient。我很难保存一个zip文件的响应。我试着只是输出流指向以"结尾的路径;。zip";但它不起作用,zip无效。我尝试过ZipOuptStream,但它要求输入,我不知道该输入。我正在尝试解压缩它,因为它来获得入口,到目前为止,一切都不起作用。以下是我迄今为止尝试过的一些变体

**           ZipInputStream zipStream = new ZipInputStream(response.getEntity().getContent());
ZipEntry entry = null;
Scanner sc = new Scanner(zipStream);
while ((entry = zipStream.getNextEntry()) != null) {
String entryName = entry.getName();
System.out.println(entryName);
FileOutputStream out = new FileOutputStream(entryName);
byte[] byteBuff = new byte[4096];
int bytesRead = 0;
while ((bytesRead = zipStream.read(byteBuff)) != -1)
{
out.write(byteBuff, 0, bytesRead);
}
out.close();
zipStream.closeEntry();
}
zipStream.close();

**

上面的代码没有看到zipStream.getNextEntry((,它总是null,无论有没有Scanner都是相同的结果,Scanner也总是返回null。

或者同样的东西,但开始是字节数组

byte[] bytes = EntityUtils.toByteArray(response.getEntity());
ZipInputStream zipStream = new ZipInputStream(new ByteArrayInputStream(bytes));

与上面的问题相同,当我稍后开始用while((entry=zipStream.getNextEntry(((处理它时!=null(从中获取文件,对于下一个元素,它也总是null

byte[] bytes = EntityUtils.toByteArray(response.getEntity());
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(filePath));
zos.write(bytes);

在这种情况下,出现了一个错误,即文件需要ZipEntry,我不知道如何获得它。我尝试过用上面的代码进行解压缩,但元素总是。

FileOutputStream fos = new FileOutputStream(filePath);
response.getEntity().writeTo(fos);

这写了一个文件,但无效,我无法手动打开它,因为它总是给我一个错误。

FileOutputStream fos = new FileOutputStream(filePath);
ZipOutputStream zos = new ZipOutputStream(fos);
response.getEntity().writeTo(zos);

这是抛出java.util.zip.ZipException:没有当前的zip条目,所以zip我可以在Windows中打开zip,但由于它坏了,所以它是空的。

但到目前为止,什么都不起作用

EDIT我不确定它与什么有关,但我通过一些方法获得的损坏文件是757kB,而我通过swagger获得的文件是14726kB。实体的数据传输是否有限制?

所以,我确实把请求搞砸了。我只请求json。所有的回复都很中肯,认为调用的返回不是一个合适的zip文件。上面的大多数选项都应该使用正确的zip传入。感谢的所有帮助

最新更新