在Java中上载目录时Amazon S3 SdkClientException

Ank*_*ngh 7 java multithreading amazon-s3

我正在使用此代码在S3上上传目录。

TransferManager transferManager = new TransferManager(s3client);
MultipleFileUpload uploaded = transferManager.uploadDirectory(BUCKET_NAME, "DirectoryName", new File(uploadDirectory), true);
Run Code Online (Sandbox Code Playgroud)

将目录上载到Amazon S3存储桶时,出现以下异常

com.amazonaws.SdkClientException: Upload canceled
    at com.amazonaws.services.s3.transfer.internal.UploadMonitor.call(UploadMonitor.java:159)
    at com.amazonaws.services.s3.transfer.internal.UploadMonitor.call(UploadMonitor.java:47)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)

此异常通常在100次尝试中发生10次左右

注意-上面的代码在多线程环境中使用相同的s3client对象执行

非常感谢!

Ank*_*ngh 5

我在 Java Amazon Sdk 中进行研发时遇到的上述问题的解决方案。而不是创建不同的TransferManager每一个线程实例,如果您使用的是相同的多个线程共享相同的实例AmazonS3Client

它不会引起任何问题,因为它是线程安全的对象,问题也解决了。