Java AWS TransferManager返回的传输字节数超过文件大小,导致挂起
我正在使用AWS的JavaSDK将一些文件(>130Mbs)上传到S3存储桶中 我遇到的问题是,在上载过程中(使用Java AWS TransferManager返回的传输字节数超过文件大小,导致挂起,java,android,amazon-web-services,amazon-s3,s3transfermanager,Java,Android,Amazon Web Services,Amazon S3,S3transfermanager,我正在使用AWS的JavaSDK将一些文件(>130Mbs)上传到S3存储桶中 我遇到的问题是,在上载过程中(使用TransferManager),getByTestTransferred()返回的数字大于文件大小本身的数字 这导致“我的进度”对话框100%挂起 我是否缺少某种配置 我应该指出,这种情况并非总是发生 public class PutFileTask extends AsyncTask<Void, Long, UploadZipCode> { @Overrid
TransferManager
),getByTestTransferred()
返回的数字大于文件大小本身的数字
这导致“我的进度”对话框100%挂起
我是否缺少某种配置
我应该指出,这种情况并非总是发生
public class PutFileTask extends AsyncTask<Void, Long, UploadZipCode> {
@Override
protected UploadZipCode doInBackground(final Void... params) {
// Initialize S3 Client
BasicAWSCredentials credentials = new BasicAWSCredentials(mS3AccessKey, mS3SecretKey);
AmazonS3Client amazonS3Client = new AmazonS3Client(credentials);
mTransferManager = new TransferManager(credentials);
mUploadStart = new Date(System.currentTimeMillis());
Upload myUpload = mTransferManager.upload(mS3UploadBucket, mFile.getName(), mFile);
myUpload.addProgressListener(new ProgressListener() {
long totalBytesTransferred = 0;
@Override
public void progressChanged(ProgressEvent progressEvent) {
totalBytesTransferred += progressEvent.getBytesTransferred();
Log.d(TAG, "Bytes transferred = " + totalBytesTransferred);
onProgressUpdate(totalBytesTransferred);\
if (progressEvent.getEventCode() == ProgressEvent.COMPLETED_EVENT_CODE) {
cancel(true);
} else if (progressEvent.getEventCode() == ProgressEvent.FAILED_EVENT_CODE
|| progressEvent.getEventCode() == ProgressEvent.CANCELED_EVENT_CODE) {
Log.e(TAG, "Uploaded erred out with AWS Event Code: " + progressEvent.getEventCode());
cancel(true);
}
Log.d(TAG, "Setting completion code to: " + progressEvent.getEventCode());
}
});
try {
myUpload.waitForCompletion();
} catch (InterruptedException e) {
cancel(true);
e.printStackTrace();
return UploadZipCode.CONNECTION_ERROR;
} catch (Exception e) {
cancel(true);
e.printStackTrace();
return UploadZipCode.AWS_ERROR;
}
return UploadZipCode.UPLOAD_SUCCESS;
}
...
@Override
protected void onPreExecute() {
super.onPreExecute();
mProgressDialog = new ProgressDialog(mActivity);
mProgressDialog.setTitle("Please wait...");
mProgressDialog.setMessage("Uploading your session zip file...");
mProgressDialog.setProgressStyle(mProgressDialog.STYLE_HORIZONTAL);
mProgressDialog.setProgress(0);
mProgressDialog.setMax((int) (mFile.length()));
mProgressDialog.setCancelable(false);
mProgressDialog.show();
}
...
@Override
protected void onProgressUpdate(Long... values) {
super.onProgressUpdate(values);
for (long value : values) {
mProgressDialog.setProgress((int) value);
}
}
...
@Override
protected void onPostExecute(UploadZipCode resultCode) {
super.onPostExecute(resultCode);
mProgressDialog.dismiss();
mListener.onUploadFinished(resultCode);
}
...
@Override
protected void onCancelled(UploadZipCode resultCode) {
super.onCancelled(resultCode);
if (mProgressDialog != null) {
mProgressDialog.dismiss();
}
mListener.onUploadFinished(resultCode);
}
}
公共类PutFileTask扩展了AsyncTask{
@凌驾
受保护的上载ZipCode doInBackground(最终无效…参数){
//初始化S3客户端
BasicAWSCredentials credentials=新的BasicAWSCredentials(mS3AccessKey、mS3SecretKey);
AmazonS3Client AmazonS3Client=新的AmazonS3Client(凭证);
MTTransferManager=新的TransferManager(凭证);
mUploadStart=新日期(System.currentTimeMillis());
Upload myUpload=mtTransferManager.Upload(mS3UploadBucket,mFile.getName(),mFile);
myUpload.addProgressListener(新的ProgressListener(){
long TotalByTestTransferred=0;
@凌驾
公共无效进程已更改(ProgressEvent){
TotalByTestTransferred+=progressEvent.GetByTestTransferred();
Log.d(标记,“已传输字节数=”+TotalByTestTransfered);
onProgressUpdate(TotalByTestTransferred)\
if(progressEvent.getEventCode()==progressEvent.COMPLETED\u事件\u代码){
取消(真);
}else if(progressEvent.getEventCode()==progressEvent.FAILED\u事件\u代码
||progressEvent.getEventCode()==progressEvent.Cancelled\u事件\u代码){
Log.e(标记“上载错误,AWS事件代码为:”+progressEvent.getEventCode());
取消(真);
}
d(标记,“将完成代码设置为:”+progressEvent.getEventCode());
}
});
试一试{
myUpload.waitForCompletion();
}捕捉(中断异常e){
取消(真);
e、 printStackTrace();
返回UploadZipCode.CONNECTION\u错误;
}捕获(例外e){
取消(真);
e、 printStackTrace();
返回UploadZipCode.AWS_错误;
}
返回UploadZipCode.UPLOAD\u成功;
}
...
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
mProgressDialog=新建进度对话框(MacActivity);
设置标题(“请稍候…”);
setMessage(“上载会话zip文件…”);
mProgressDialog.setProgressStyle(mProgressDialog.STYLE_水平);
mProgressDialog.setProgress(0);
setMax((int)(mFile.length());
mProgressDialog.setCancelable(假);
mProgressDialog.show();
}
...
@凌驾
受保护的void onProgressUpdate(长…值){
super.onProgressUpdate(值);
for(长值:值){
mProgressDialog.setProgress((int)值);
}
}
...
@凌驾
受保护的void onPostExecute(上载ZipCode resultCode){
super.onPostExecute(resultCode);
mProgressDialog.disclose();
mListener.onUploadFinished(结果代码);
}
...
@凌驾
取消时受保护的空(上载ZipCode resultCode){
super.onCancelled(resultCode);
如果(mProgressDialog!=null){
mProgressDialog.disclose();
}
mListener.onUploadFinished(结果代码);
}
}
onProgressUpdate(TotalByTestTransferred);\代码>通常不会调用该函数。您可以调用publishProgress()
。请试着换衣服。我想知道:你必须使用异步任务吗?管理器本身不是异步的吗?