Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java AWS TransferManager返回的传输字节数超过文件大小,导致挂起_Java_Android_Amazon Web Services_Amazon S3_S3transfermanager - Fatal编程技术网

Java AWS TransferManager返回的传输字节数超过文件大小,导致挂起

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

我正在使用AWS的JavaSDK将一些文件(>130Mbs)上传到S3存储桶中

我遇到的问题是,在上载过程中(使用
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()
。请试着换衣服。我想知道:你必须使用异步任务吗?管理器本身不是异步的吗?