当前位置: 首页 > 知识库问答 >
问题:

如何使用Java Springboot返回zip文件流

祁柏
2023-03-14

我使用Springboot,我想生成zip文件,然后返回前端。

@PostMapping(value="/export", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
public ResponseEntity<ZipOutputStream> export() {
    // customService.generateZipStream() is a service method that can 
    //generate zip file using ZipOutputStream and then return this stream
    ZipOutputStream zipOut = customService.generateZipStream();
    return ResponseEntity
                  .ok()
                  .header("Content-Disposition", "attachment;filename=export.zip")
                  .header("Content-Type","application/octet-stream")
                  .body(zipOut)
}
spring.HttpMediaTypeNotAcceptableException: Could not find acceptable representation
   // pseudocode
   .body(out -> { 
                   ZipOutputStream zipOut = new ZipOutputStream(out));
                   zipOut.putEntry(...);
                   zipOut.write(...);
                   zipOut.closeEntry();
                   ... balabala
                }

共有1个答案

唐宇定
2023-03-14

您可以尝试将其作为字节数组发回:

ByteArrayOutputStream bos = new ByteArrayOutputStream();

ZipOutputStream zipOut = customService.generateZipStream();

int count;
byte data[] = new byte[2048];
BufferedInputStream entryStream = new BufferedInputStream(is, 2048);
while ((count = entryStream.read(data, 0, 2048)) != -1) {
    zos.write( data, 0, count );
}
entryStream.close();

return ResponseEntity
              .ok()
              .header("Content-Disposition", "attachment;filename=export.zip")
              .header("Content-Type","application/octet-stream")
              .body(bos.toByteArray());

考虑您需要将返回类型更改为responseentity

 类似资料:
  • 问题内容: 我有一种生成带有一些数据库记录的CSV文件的方法 我希望该方法是一个端点,以便从任何类型的客户端(Web或移动设备)调用它以下载它。在Google Cloud Endpoint文档中 ,没有关于File作为有效返回类型的信息。我如何创建并终结返回文件的文件? 问题答案: 这是将文件从端点保存到Cloud Storage并返回用于下载文件的URL的方法。 1 /在您的项目控制台中激活Go

  • 我有一个函数,可以从文件列表中创建一个Zip文件。是否可以在不保存在磁盘上的情况下返回Zip文件?我需要这个文件,因为我必须使用zip文件作为另一个函数的参数。我不确定ByteStream是否适合我。 编辑:添加用例 其想法是创建一个zip文件,并使用Watson的VisualRecognition服务的CreateClassifications方法。 构建器接受zip文件作为参数。 理解 根据A

  • 问题内容: 我想创建受密码保护的ZIP: 但这只是加密zip中的文件,但我可以打开此zip并查看其中的文件 问题答案: 由于专利问题,Zip4j不支持文件列表的加密。 参见:http : //www.lingala.net/zip4j/forum/index.php?topic=104.0 更新: 如链接中所述。zip规范不包括文件列表的加密。要隐藏文件名,您可以创建一个zip文件,其中包含您的文

  • 有谁知道用zlib是否可以创建zip格式?怎么做?

  • 我有一个API,它使用archiver模块创建一个zip文件,我想在其中将zip作为响应传递回客户端并下载它。 这就是我创建zip的API的样子: 这里还有另一个API供参考,它展示了我是如何习惯于将数据发送回客户端的: 如何将zip作为响应发送回并在客户端将其下载到磁盘?

  • 问题内容: 我必须使用SFTP从ZIP存档(只有一个文件,我知道它的名称)中获取文件内容。我唯一拥有的是ZIP的。大多数示例说明如何使用以下语句获取内容: 但是正如我所说,我的本地计算机上没有ZIP文件,也不想下载它。是够看了? UPD: 这是我的方法: 问题答案: 好吧,我已经做到了: 它可以帮助我阅读ZIP的内容而无需写入另一个文件。