Amazon S3 上传问题 Android SDK、com.amazonaws.AmazonClientException:读取的数据 (4567265) 多于预期 (4561427)
Posted
技术标签:
【中文标题】Amazon S3 上传问题 Android SDK、com.amazonaws.AmazonClientException:读取的数据 (4567265) 多于预期 (4561427)【英文标题】:Amazon S3 Upload issue Android SDK, com.amazonaws.AmazonClientException: More data read (4567265) than expected (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 上更新,它应该会显着降低错误率。 【参考方案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写问题
我希望你能解决你的问题。祝你好运!)
【讨论】:
以上是关于Amazon S3 上传问题 Android SDK、com.amazonaws.AmazonClientException:读取的数据 (4567265) 多于预期 (4561427)的主要内容,如果未能解决你的问题,请参考以下文章
Amazon S3 上传问题 Android SDK、com.amazonaws.AmazonClientException:读取的数据 (4567265) 多于预期 (4561427)
如何在不使用 SDK 的情况下将文件从 Android 上传到 Amazon S3