Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java AWS TransferManager上载文件列表截断S3中的文件名_Java_Amazon Web Services_Amazon S3_Awss3transfermanager - Fatal编程技术网

Java AWS TransferManager上载文件列表截断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

我正在尝试使用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)
        );
    }
@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");