直接和續傳的媒體上傳作業

本文說明如何搭配使用直接上傳和支援續傳的媒體檔案: 適用於 Java 的 Google API 用戶端程式庫

支援續傳的媒體上傳作業

將大型媒體檔案上傳至伺服器時,請使用支援續傳的媒體檔案進行以下作業: 分批傳送檔案Google API 產生的程式庫包含 以便與支援續傳的媒體上傳作業互動的便利方法。

支援續傳的媒體上傳通訊協定與支援續傳的媒體上傳作業相似 通訊協定 (詳情請參閱 Google Drive API 說明文件) 中所述。

通訊協定設計

以下是支援續傳的媒體上傳通訊協定的運作方式:
顯示要求和回應如何在用戶端和伺服器之間移動的流程圖。

實作詳情

主要類別為 MediaHttpUploaderMediaHttpProgressListener

如果服務專屬產生程式庫中的方法包含 mediaUpload 參數加入探索文件中, 反而為這些方法建立方便好用的方法 InputStreamContent 做為參數(如要進一步瞭解如何透過 Google API 使用媒體上傳功能, 探索服務,請參閱 媒體上傳)。

例如 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();

即使沒有特定服務,你也可以使用支援續傳的媒體上傳功能 產生的程式庫範例如下:

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); }

直接上傳媒體

支援續傳的媒體上傳功能預設為啟用,但您可以將其停用,然後改用 直接上傳媒體內容,例如您上傳小檔案時。直達 1.9.0-beta 版導入媒體上傳功能 適用於 Java 的 Google API 用戶端程式庫版本。

直接上傳媒體會透過一個 HTTP 要求上傳整個檔案,而不是 支援續傳的媒體上傳通訊協定,可透過多個要求上傳檔案。 直接上傳會減少 HTTP 要求的數量,但這麼做會增加 可能發生在 上傳。

直接媒體上傳的使用方式與上述 支援續傳的媒體上傳作業,以及下列向 MediaHttpUploader 的呼叫 只允許直接上傳

mediaHttpUploader.setDirectUploadEnabled(true);