【发布时间】: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