【问题标题】:Amazon S3 SdkClientException while Directory Uploading in Java在 Java 中上传目录时出现 Amazon S3 SdkClientException
【发布时间】:2018-03-15 18:06:22
【问题描述】:

我正在使用此代码在 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 对象

非常感谢!

【问题讨论】:

  • 您使用的是什么版本的 s3Bucket
  • 请添加堆栈跟踪中打印的异常原因。它可能会因为点击次数超过给定的限制而失败:) 我希望我会建议你使用 1.10 以上版本或更高版本
  • @VikrantKashyap 这就是我在堆栈跟踪中得到的全部内容。我们可以给予限制,因为我没有给予任何地方。
  • @RahulGupta 1.11.190

标签: java multithreading amazon-s3


【解决方案1】:

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

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

【讨论】:

  • 我也遇到了同样的问题,感谢研发。您是否弄清楚为什么多个 TransferManager 共享同一个 AmazonS3Client 会出现问题?
猜你喜欢
  • 2013-07-07
  • 2020-09-13
  • 1970-01-01
  • 2015-10-28
  • 2011-06-09
  • 2017-07-07
  • 2014-12-06
  • 2019-02-13
  • 1970-01-01
相关资源
最近更新 更多