Java AWS TransferManager上载文件列表截断S3中的文件名
我正在尝试使用TranferManager在S3中批量上传几个文件。下面是我的代码:Java AWS TransferManager上载文件列表截断S3中的文件名,java,amazon-web-services,amazon-s3,awss3transfermanager,Java,Amazon Web Services,Amazon S3,Awss3transfermanager,我正在尝试使用TranferManager在S3中批量上传几个文件。下面是我的代码: @GetMapping("s3/batch/upload/base64") public void uploadBase64ToWebp() { List<File> fileList = new ArrayList<>(); String rawData = "1"; String base64Data = Base64.encodeBase64String
@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)
);
}
@GetMapping(“s3/batch/upload/base64”)
public void uploadBase64ToWebp(){
List fileList=new ArrayList();
字符串rawData=“1”;
String base64Data=Base64.encodeBase64String(rawData.getBytes(StandardCharsets.UTF_8));
字节[]数据=getBinaryImageData(base64Data);
File File=新文件(“1234.webp”);
试一试{
writeByteArrayToFile(文件,数据);
}捕获(IOE异常){
系统输出打印ln(e);
}
fileList.add(文件);
ObjectMetadataProvider metadataProvider=新的ObjectMetadataProvider(){
public void提供对象元数据(文件、对象元数据){
setContentType(“image/webp”);
metadata.getUserMetadata().put(“filename”,file.getPath());
metadata.getUserMetadata().put(“createDateTime”,new Date().toString());
}
};
TransferManager TransferManager=TransferManagerBuilder.standard().With3Client(amazonS3.build();
transferManager.uploadFileList(bucketName,“学校/交易”,新文件(“.”),文件列表,metadataProvider);
}
私有字节[]getBinaryImageData(字符串图像){
返回Base64.decodeBase64(
形象
.replace(“数据:image/webp;base64,”,“”)
.getBytes(标准字符集.UTF_8)
);
}
在这里,您可以看到,我将文件名命名为“1234.webp”,但在S3中保存的文件名是“34.webp”。我尝试了一个更大的名称,如“1234567.webp”,前两位数字再次被截断,文件名是“34567.webp”。我做错了什么
请注意,在我粘贴到这里的示例中,我只上载了一个文件,但在我的实际代码中,我确实上载了多个文件,但在这两种情况下,名称都会被截断。好的,所以这是一个Java IO问题。我更新了下面的显示路径,它成功了 旧的: 新的:
仍在试图找出前两个字母被删除的原因。metadata.getUserMetadata().put(“filename”,file.getPath());如果要使用文件名,是否应该使用file.getName()而不是file.getPath()?当我在S3中看到该文件的元数据时,文件名属性的名称为“1234.webp”。问题在于实际保存文件的名称。当我转到bucket文件夹时,我会看到'34.webp'作为文件,如果我试图查看其元数据,文件名将被删除。由于提供的
pathname
字符串被转换为抽象的pathname
-请参阅,和
File file = new File("1234.webp");
File file = new File("./1234.webp");