【问题标题】:Resumable Upload - Google Drive可恢复上传 - Google 云端硬盘
【发布时间】:2017-03-15 16:37:05
【问题描述】:

您好,我正在尝试从 google drive API 实现 Resumable Upload,但我遇到了问题。

有人能够从 google 的 java tutorial 运行上述代码吗?

File mediaFile = new File("/tmp/Test.jpg");
InputStreamContent mediaContent =
    new InputStreamContent("image/jpeg",
        new BufferedInputStream(new FileInputStream(mediaFile)));
mediaContent.setLength(mediaFile.length());

MediaHttpUploader uploader = new MediaHttpUploader(mediaContent, transport, httpRequestInitializer);
uploader.setProgressListener(new CustomProgressListener());
HttpResponse response = uploader.upload(requestUrl);
if (!response.isSuccessStatusCode()) {
  throw GoogleJsonResponseException(jsonFactory, response);
}

我需要知道如何声明/创建 transport 变量和 httpRequestInitializer

或者一个执行大文件上传到谷歌系统的例子。

【问题讨论】:

    标签: java google-drive-api


    【解决方案1】:

    HttpRequestInitializerBasic Authentication Scheme 中指定的基本身份验证 HTTP 请求初始化程序。

    例如,这可能用于禁用请求超时:

    public class DisableTimeout implements HttpRequestInitializer {
      public void initialize(HttpRequest request) {
        request.setConnectTimeout(0);
        request.setReadTimeout(0);
      }
    }
    

    正如您所说,您需要使用resumable media upload 逐块上传/发送大文件。比如Drive APIinsert方法支持mediaUpload,可以使用如下代码上传文件:

    class CustomProgressListener implements MediaHttpUploaderProgressListener {
      public void progressChanged(MediaHttpUploader uploader) throws IOException {
        switch (uploader.getUploadState()) {
          case INITIATION_STARTED:
            System.out.println("Initiation has started!");
            break;
          case INITIATION_COMPLETE:
            System.out.println("Initiation is complete!");
            break;
          case MEDIA_IN_PROGRESS:
            System.out.println(uploader.getProgress());
            break;
          case MEDIA_COMPLETE:
            System.out.println("Upload is complete!");
        }
      }
    }
    
    File mediaFile = new File("/tmp/driveFile.jpg");
    InputStreamContent mediaContent =
        new InputStreamContent("image/jpeg",
            new BufferedInputStream(new FileInputStream(mediaFile)));
    mediaContent.setLength(mediaFile.length());
    
    Drive.Files.Insert request = drive.files().insert(fileMetadata, mediaContent);
    request.getMediaHttpUploader().setProgressListener(new CustomProgressListener());
    request.execute();
    

    以下是一些可能也有帮助的参考资料:

    【讨论】:

    • 这是用的V3版本?我能够在 V2 而不是 V3 中做到这一点
    猜你喜欢
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多