首页 > 解决方案 > 从 Spring Boot 应用程序渲染时,随机数被附加到 zip 中包含的文件名

问题描述

我正在尝试从文件列表中创建一个 zip 文件并在 Spring Boot 应用程序中呈现该 zip。我正在粘贴下面相同的代码片段以便更好地理解:

public static ResponseEntity<StreamingResponseBody>
      getZippedResponseFromFiles(List<File> fileList) {
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
    headers.set(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=results.zip");
    return ResponseEntity.ok()
        .headers(headers)
        .contentType(MediaType.APPLICATION_OCTET_STREAM)
        .body(out -> {
          var zipOutputStream = new ZipOutputStream(out);
          for (File file : fileList) {
            zipOutputStream.putNextEntry(new ZipEntry(file.getName()));
            try (FileInputStream fileInputStream = new FileInputStream(file)) {
              IOUtils.copy(fileInputStream, zipOutputStream);
            }
            zipOutputStream.closeEntry();
          }
          zipOutputStream.close();
        });
  }

这里一切正常,除了一个随机数被附加到 zip 中包含的文件名。我无法理解如何解决这个问题。

有人可以帮忙吗?谢谢。

编辑

我大概明白问题出在哪里了。以下是下载 s3 对象并将其存储在文件中的代码片段:

public File downloadObject(String filePath) {
    File file = null;
    try {
      file = File.createTempFile(filePath, "");
      file.deleteOnExit();
      amazonS3.getObject(new GetObjectRequest(bucketName, filePath), file);
    } catch (SdkClientException exception) {
      throw new TcBadServerStateException(ErrorCodeEnum.AWS_SERVICE_ERROR, exception);
    } 
    return file;  <--THE FILE HAS THE RANDOM NUMBER APPENDED TO FILENAME
  }

在文件中,从该函数返回的文件中,随机数被附加到文件名中。我不知道如何解决这个问题。

标签: javaspringspring-bootzip

解决方案


推荐阅读