【问题标题】:Amazon S3 Upload issue Android SDK, com.amazonaws.AmazonClientException: More data read (4567265) than expected (4561427)Amazon S3 上传问题 Android SDK、com.amazonaws.AmazonClientException:读取的数据 (4567265) 多于预期 (4561427)
【发布时间】:2018-08-30 03:16:01
【问题描述】:

当我使用 amazon s3 SDK 从 Nexus 6 上传文件时,它会抛出 com.amazonaws.AmazonClientException: More data read (4567265) than expected (4561427) 异常。

但是当我使用相同的代码从 Moto G4 上传图片时,它每次都会上传。

请帮我解决这个问题。

这是我的参考代码:

 private void uploadingScreenshot(String filePath) 
    {
        File file = new File(filePath);
        if (file.exists()) {
            final String serverPath = S3Util.getMediaPath(Utility.MediaType.SCREENSHOT, false, "");
            ObjectMetadata meta = new ObjectMetadata();
            meta.setContentLength(file.length());
            S3Util.uploadMedia(SharedFolderDetailActivity.this, file, serverPath, meta, new TransferListener() {
                @Override
                public void onStateChanged(int id, TransferState state) {
                    switch (state) {
                        case COMPLETED: {
                            String path = S3Constants.BUCKET_URL + serverPath;
                            callTookScreenshotNotifierWS(path);
                        }
                        break;
                    }
                }

                @Override
                public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) {

                }

                @Override
                public void onError(int id, Exception ex) {
                    if (ex != null)
                        Log.e(TAG, ex.getMessage());
                }
            });
        }
    }

该函数用于在amazon s3服务器上上传文件。

 public class S3Util {

        public static TransferObserver uploadMedia(final Context context, File file, String s3Path, ObjectMetadata objectMetadata, TransferListener l) {
            TransferObserver observer = getTransferUtility(context).upload(S3Constants.BUCKET_NAME, s3Path, file,objectMetadata);
            observer.setTransferListener(l);
            return observer;
        }
    }

【问题讨论】:

  • //亚马逊s3服务器sdk实现“com.amazonaws:aws-android-sdk-s3:2.6.+”
  • 尝试创建文件的副本,然后阅读它,看看是否有帮助。还可以尝试在阅读之前锁定文件,看看是否有帮助? dzone.com/articles/locking-files-in-java。可能是上传文件时开头和结尾的内容不同
  • 我曾经在上传文件的同时重写文件时遇到了同样的错误。
  • 这很可能是由@Nathanael 描述的情况引起的。我建议如果可能的话,如果是定期上传,每个时间段一个文件,则对文件进行分区。如果上传不是定期的,那么您可以运行一个线程来检查文件大小,然后每隔几秒钟检查一次文件大小,直到两个连续的大小相等。这并不能保证成功,但如果文件没有无限期地在 S3 上更新,它应该会显着降低错误率。

标签: android amazon-s3 file-upload upload


【解决方案1】:

试试这个答案AmazonClientException: Data read has a different length than the expected

我之前也遇到过这个问题, 希望对你有帮助

【讨论】:

    【解决方案2】:

    我的看法是,aws-sdk 和 android sdk 存在兼容性问题。最好的方法是尝试降级您的 aws-version 并使用您的 android sdk 找出更稳定的版本。也许我错了。。

    另外,我建议你在https://github.com/aws/aws-sdk-android/issues写问题

    我希望你能解决你的问题。祝你好运!)

    【讨论】:

      猜你喜欢
      • 2015-05-12
      • 2014-10-05
      • 1970-01-01
      • 2012-03-04
      • 2014-05-07
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      相关资源
      最近更新 更多