Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Upload progress listener not fired (Google drive API)

I want to show progress by percent of an uploading file using Google drive API.

My menthod has successful upload a file before but It can't see upload progress.

I've seen and added this FileUploadProgressListener but mediaHttpUploader.getProgress() show only 0.0 (start of progress) and 1.0 (when progress finished). I can't get percent of progress in time.

How to make It work?

Here is my Upload code:

public void UploadFile(final DFile uploadFile) {
    if (!isLoggedIn()) {
        OnUploadGoogleChecked(FALSE, "Not logged in");
        return;
    }
    AsyncTask<Void, Long, String> task = new AsyncTask<Void, Long, String>() {
        java.io.File fileContent;
        FileContent mediaContent;
        com.google.api.services.drive.model.File body;
        com.google.api.services.drive.model.File file;
        private ProgressDialog mDialog;
        long mFileLen;

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();
            mDialog = new ProgressDialog(act);
            mDialog.setMax(100);
            mDialog.setMessage("Uploading ");
            mDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            mDialog.setProgress(0);
            mDialog.setButton("Cancel", new OnClickListener() {

                @Override
                public void onClick(DialogInterface arg0, int arg1) {
                    // TODO Auto-generated method stub

                }
            });
            mDialog.show();
        }

        class FileUploadProgressListener implements MediaHttpUploaderProgressListener {

            @Override
            public void progressChanged(MediaHttpUploader uploader) throws IOException {
                Log.d("Dolphin got percent", String.valueOf(uploader.getProgress()));
                switch (uploader.getUploadState()) {
                case INITIATION_STARTED:
                    System.out.println("Initiation Started");
                    break;
                case INITIATION_COMPLETE:
                    System.out.println("Initiation Completed");
                    break;
                case MEDIA_IN_PROGRESS:
                    System.out.println("Upload in progress");
                    System.out.println("Upload percentage: " + uploader.getProgress());
                    break;
                case MEDIA_COMPLETE:
                    System.out.println("Upload Completed!");
                    break;
                case NOT_STARTED:
                    System.out.println("Upload Not Started!");
                    break;
                }
            }
        }

        @Override
        protected String doInBackground(Void... arg0) {
            try {

                java.io.File UPLOAD_FILE = new java.io.File(uploadFile.getNameAndDir());
                // File's metadata.
                fileContent = new java.io.File(uploadFile.getNameAndDir());
                mFileLen = fileContent.length();

                InputStreamContent mediaContent2 = new InputStreamContent("image/jpeg", new BufferedInputStream(new FileInputStream(UPLOAD_FILE)));
                mediaContent2.setLength(UPLOAD_FILE.length());
                body = new com.google.api.services.drive.model.File();
                body.setTitle(fileContent.getName());
                body.setMimeType("image/jpeg");
                String parentId = null;
                body.setParents(Arrays.asList(new ParentReference().setId(uploadFile.getFileHostFolderId())));


                Drive.Files.Insert mInsert = service.files().insert(body, mediaContent2);
                MediaHttpUploader uploader = mInsert.getMediaHttpUploader();
                uploader.setDirectUploadEnabled(true);
                uploader.setProgressListener(new FileUploadProgressListener());
                file = mInsert.execute();
                if (file != null) {

                }

            } catch (UserRecoverableAuthIOException e) {

                Log.d("Dolphin got error", "not login " + e);
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }


        protected void onPostExecute(String result) {
            mDialog.dismiss();
            OnUploadGoogleChecked(TRUE, "Upload complete");
        };
    };
    task.execute();
}
like image 330
Tai Dao Avatar asked Aug 01 '13 06:08

Tai Dao


People also ask

Why does upload fail on Google Drive?

If Google Drive is full, it will cause the “Google Drive upload failure” issue. Therefore, you can check how much storage is left. If it is not sufficient, you can choose to upgrade your Google Drive account. Now, you can check your Google Drive storage on the web, or by Drive for Desktop.

Is there a Google Drive API?

The Google Drive API allows you to create apps that leverage Google Drive cloud storage. You can develop applications that integrate with Drive, and create robust functionality in your application using the Drive API.


1 Answers

To get progress, you must use uploader.setDirectUploadEnabled(false); (instead of true) and uploader.setChunkSize(MediaHttpUploader.MINIMUM_CHUNK_SIZE); or any value which must be the multiply of MediaHttpUploader.MINIMUM_CHUNK_SIZE, else it will cause error.

like image 77
tcboy88 Avatar answered Nov 10 '22 20:11

tcboy88