java - AWS TransferManager uploadFileList 在 S3 中截断文件名
问题描述
我正在尝试使用 TranferManager 在 S3 中批量上传几个文件。下面是我的代码:
@GetMapping("s3/batch/upload/base64")
public void uploadBase64ToWebp() {
List<File> fileList = new ArrayList<>();
String rawData = "1";
String base64Data = Base64.encodeBase64String(rawData.getBytes(StandardCharsets.UTF_8));
byte[] data = getBinaryImageData(base64Data);
File file = new File("1234.webp");
try {
FileUtils.writeByteArrayToFile(file, data);
} catch (IOException e) {
System.out.println(e);
}
fileList.add(file);
ObjectMetadataProvider metadataProvider = new ObjectMetadataProvider() {
public void provideObjectMetadata(File file, ObjectMetadata metadata) {
metadata.setContentType("image/webp");
metadata.getUserMetadata().put("filename", file.getPath());
metadata.getUserMetadata().put("createDateTime", new Date().toString());
}
};
TransferManager transferManager = TransferManagerBuilder.standard().withS3Client(amazonS3).build();
transferManager.uploadFileList(bucketName, "school/transactions", new File("."), fileList, metadataProvider);
}
private byte[] getBinaryImageData(String image) {
return Base64.decodeBase64(
image
.replace("data:image/webp;base64,", "")
.getBytes(StandardCharsets.UTF_8)
);
}
在这里,如您所见,我将文件名指定为“1234.webp”,但保存在 S3 中的文件名是“34.webp”。我尝试了一个更大的名称,例如“1234567.webp”,前两位数字再次被截断,文件名为“34567.webp”。我做错了什么?
请注意,在我粘贴在这里的示例中,我只是上传一个文件,但在我的实际代码中,我确实上传了多个文件,但在这两种情况下,无论如何,名称都会被截断。
解决方案
好的,这是一个 Java IO 问题。我更新了以下内容以显示路径并且它有效。
老的:
File file = new File("1234.webp");
新的:
File file = new File("./1234.webp");
仍在试图弄清楚为什么前两个字母被丢弃了。
推荐阅读
- react-native - 仅反应原生构建(android)
- javascript - 如何使用 ajax 通信 python-mysql 和 js?
- c# - 在 .Net Dynamics CRM 应用程序中保存要联系的父帐户
- asp.net-core - 常规方法和异步方法有什么区别(OnGet vs OnGetAsync)
- firebase - 为什么functions.config() 返回{}?
- python - Python 编写 CSV 文件
- c# - c#定义接收方法作为参数的方法,具有不同的重载
- python - 使用自己的模型作为用户登录
- django - Django 2.0:ModelChoiceField 中的 TextInput 显示 id 而不是值
- powershell - 将对象转换为日期,然后进行比较