java - 从 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
}
在文件中,从该函数返回的文件中,随机数被附加到文件名中。我不知道如何解决这个问题。
解决方案
推荐阅读
- java - 基于元素值的 JAXB 解组
- laravel - Laravel TNTSearch 关键字匹配
- reactjs - useValidation 挂钩未按预期工作
- c++ - C ++(const char *)长度相同但内容不同在Swift中
- amazon-s3 - 无法通过在浏览器中加载 presignedURL 来加载文件
- database - Laravel 从数据库中跳过和删除记录
- javascript - Javascript使具有未知数据和未知数量的数组的数组长度相等
- javascript - Vue-multiselect:如何将对象转换为数组以在选项道具中使用?
- python - TimeoutError: [Errno 60] 操作超时 (starttls())
- ios - RPSystemBroadcaster-当应用程序在 iOS 中终止时如何停止屏幕录制?