2

AWS の Java SDK を使用して、いくつかのファイル (>130 MB) を S3 バケットにアップロードしています。

私が抱えている問題は、アップロード プロセス中に (を使用してTransferManager)、getBytesTransferred()ファイル サイズ自体よりも大きな数値が返されることです。

これにより、進行状況ダイアログが 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);
    }
}
4

0 に答える 0