Java中的目录上载时的Amazon S3 SdkClientException

时间:2017-10-04 11:05:40

标签: java multithreading amazon-s3

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

TransferManager transferManager = new TransferManager(s3client);
MultipleFileUpload uploaded = transferManager.uploadDirectory(BUCKET_NAME, "DirectoryName", new File(uploadDirectory), true);

将目录上传到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)

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

  

注意 - 上面的代码在具有相同s3client对象

的多线程环境中执行

非常感谢!

1 个答案:

答案 0 :(得分:3)

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

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