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

如何使用spring boot压缩下载文件

赵俊远
2023-03-14

我是java的初学者,想要一些关于使用rest api调用将下载文件压缩到MSSQL后端的帮助。下面是代码段,它将ID作为输入参数,获取特定于该ID的记录并将其下载到本地。我现在需要修改的代码压缩文件时,它正在下载。

@GetMapping("/message/save")
    @CrossOrigin(origins = "*")
    public ResponseEntity<byte[]> download(@RequestParam("id") Long id) throws Exception {
        Optional<MessageEntity> messageRecord = messageRepository.findById(id);
        MessageEntity messageEntity = messageRecord.get();
        ObjectMapper objectMapper = new ObjectMapper();
        String xml = objectMapper.writeValueAsString(messageEntity);
        byte[] isr = xml.getBytes();
        String fileName = "message.zip";
        HttpHeaders respHeaders = new HttpHeaders();
        respHeaders.setContentLength(isr.length);
        respHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        respHeaders.set(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + fileName);
        return new ResponseEntity<byte[]>(isr, respHeaders, HttpStatus.OK);
    }

我希望输出是一个压缩文件。

共有1个答案

东郭自强
2023-03-14

我不确定我是否理解清楚你的问题。但我假设您只需要从String生成zip即可:

@GetMapping("/message/save")
@CrossOrigin(origins = "*")
public void download(@RequestParam("id") Long id, HttpServletRequest request,
                     HttpServletResponse response) throws Exception {
    MessageEntity messageEntity = messageRepository.findById(id).orElseThrow(() -> new Exception("Not found!"));
    String xml = new ObjectMapper().writeValueAsString(messageEntity);
    String fileName = "message.zip";
    String xml_name = "message.xml";
    byte[] data = xml.getBytes();
    byte[] bytes;
    try (ByteOutputStream fout = new ByteOutputStream();
         ZipOutputStream zout = new ZipOutputStream(fout)) {
        zout.setLevel(1);
        ZipEntry ze = new ZipEntry(xml_name);
        ze.setSize(data.length);
        zout.putNextEntry(ze);
        zout.write(data);
        zout.closeEntry();
        bytes = fout.getBytes();
    }
    response.setContentType("application/zip");
    response.setContentLength(bytes.length);
    response.setHeader("Content-Disposition",
            "attachment; "
                    + String.format("filename*=" + StandardCharsets.UTF_8.name() + "''%s", fileName));
    ServletOutputStream outputStream = response.getOutputStream();
    FileCopyUtils.copy(bytes, outputStream);
    outputStream.close();
}
 类似资料:
  • 问题内容: 如何更改压缩文件的以下命令? 该命令可以正常使用正常文件。我需要更改压缩文件的命令。 问题答案: 您需要像这样读取它们的压缩文件: 尝试这个:

  • 常用压缩包—解压—令整理 Linux 后缀为 .war 格式的文件(一般用在部署 Tomcat 项目的时候) 命令:unzip -oq XXXXXX.war -d ROOT 如果没有 ROOT 目录会自动创建 ROOT 目录。 Linux 后缀为 .tar.gz 格式的文件-解压 命令:tar zxvf XXXXXX.tar.gz Linux 后缀为 .bz2 格式的文件-解压 命令:bzip2

  • 问题内容: 我想使用urllib下载文件,并在保存之前对文件进行解压缩。 这就是我现在所拥有的: 最终将写入空文件。我该如何实现自己的追求? 更新的答案: 问题答案: 在写完之后,但要传递给之前,您需要寻找到开始的地方。否则它将被模块从头读取,并显示为空文件。见下文:

  • 问题内容: 如果文件是A ,我可以解压缩文件,如果文件类型是I,则可以解压缩文件。我如何使用python 2.7进行此工作? 问题答案: 试试这个包:

  • 问题内容: 如果我想使用命令下载软件包(及其依赖项),但 保留 所有已下载的压缩文件(例如django- socialregistration.tar.gz)-有没有办法做到这一点? 我尝试了各种命令行选项,但它似乎总是解压缩并 删除 zipfile-或获取zipfile,但 仅 适用于原始程序包,而不适用于依赖项。 问题答案: 不推荐使用。从8.0.0版开始,您应该使用以下命令:

  • 问题内容: 我很难弄清楚如何使用2.4解压缩zip文件。不包含在2.4中。我只能在服务器上使用2.4.4。 有人可以提供一个简单的代码示例吗? 问题答案: 您必须使用和。考虑目录的样本