1

我一直在使用AWS android sdk(s)来处理我的android应用程序中S3上的文件。用户遇到了一些问题,其中很少涉及连接超时。虽然在我的应用程序中设置的AmazonS3客户端,我已经设置了超时,并使用下面的代码的重试次数:AWS Android SDK连接超时和重试

ClientConfiguration clientConfiguration = new ClientConfiguration(); 
clientConfiguration.setMaxErrorRetry(4); 
clientConfiguration.setConnectionTimeout(10000); // default is 10 secs 
clientConfiguration.setSocketTimeout(15000); // default is 50 secs 

我到处看,它说,maxErrorRetry只做重试failed retryable requests。与连接超时和套接字连接超时相关的错误是否也属于此类别?如果不是,这种情况的解决方案是什么?我一直在寻找这个相当长的一段时间,但没有得到任何明确的答案。

另外,我一直面临两个特殊的例外,我在TransferListener回调中遇到了这个例外。主要有:

  1. 无法对象的内容存储到磁盘:读取超时(所有谁面对任何AWS例外面对此异常的用户的14%)
  2. 无法存储对象的内容到硬盘:超时(17.4所有面临任何AWS例外的用户的百分比都面临此例外)

上述两个对我们来说是最痛苦的。我一直认为这是因为用户设备上没有更多的存储空间。我一直在使用外部存储器中的特定于应用程序的目录来存储这些文件,现在正在考虑将这些文件移动到缓存中,以便系统在设备上没有剩余空间的情况下处理清除文件。您认为这是一个很好的解决方案,假设用户设备上的空间不足。 有什么其他的可能性,因为上述存储相关的异常可能发生?

回答

1

此错误发生在SDK中的三个地方,其中两个地方是重要的并且适用于此处。

(1)https://github.com/aws/aws-sdk-android/blob/0958a37b4757c41cac40597b973ff417e0b758c4/aws-android-sdk-s3/src/main/java/com/amazonaws/services/s3/internal/ServiceUtils.java#L284

(2)https://github.com/aws/aws-sdk-android/blob/3983fda8c2d8703399ac4e9bf6ec0464d000a5af/aws-android-sdk-s3/src/main/java/com/amazonaws/mobileconnectors/s3/transferutility/DownloadTask.java#L161

我怀疑这是在(2)抛出异常,你的情况。这可能由于多种原因而发生,存储空间不足仅仅是其中之一。

(1)S3对象不存在或S3存储桶/对象没有所需的权限。如果您拥有访问内容所需的权限,请查看AWS S3控制台。 (2)在下载过程中可能会出现网络中断。检查整个传输过程中是否有适当的网络

检查AWS CloudWatch日志以查看日志中是否有任何故障。

+0

谢谢你的回复。 S3存储桶对象具有所需的权限。该应用程序正在投入生产,并且这些都是发生在小部分用户中的例外情况。其他方面,我一定会考虑。 – Swapnil

+0

如果问题仍然存在,您可以使用堆栈跟踪创建论坛帖子/ GitHub问题以及有关重现问题的更多详细信息? – Karthikeyan