我一直在使用AWS android sdk处理我的android应用程序中S3上的文件。用户遇到了一些问题,而这些问题很少与连接超时有关。在我的应用程序中设置AmazonS3客户端时,我使用以下代码设置了超时时间和重试次数:

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回调中遇到的两个特定异常。有:
  • 无法将对象内容存储到磁盘:读取超时(面对任何AWS异常的所有用户中有14%会遇到此异常)
  • 无法将对象内容存储到磁盘:超时(面临任何AWS异常的所有用户中的17.4%都遇到此异常)

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

    最佳答案

    此错误在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 Logs以查看日志中是否有任何故障。

    08-03 18:46
    查看更多