Mendownload dan mengekspor file

Google Drive API mendukung beberapa jenis tindakan download dan ekspor, seperti yang tercantum dalam tabel berikut:

Tindakan download
Konten file blob menggunakan metode files.get dengan parameter URL alt=media.
Konten file blob pada versi sebelumnya menggunakan metode revisions.get dengan parameter URL alt=media.
Konten file blob di browser menggunakan kolom webContentLink.
Konten file blob menggunakan metode files.download selama operasi yang berjalan lama. Ini adalah satu-satunya cara untuk mendownload file Google Vids.
Tindakan ekspor
Konten dokumen Google Workspace dalam format yang dapat ditangani aplikasi Anda, menggunakan metode files.export.
Konten dokumen Google Workspace di browser menggunakan kolom exportLinks.
Konten dokumen Google Workspace pada versi sebelumnya di browser menggunakan kolom exportLinks.
Konten dokumen Google Workspace menggunakan metode files.download selama operasi yang berjalan lama.

Sebelum mendownload atau mengekspor konten file, pastikan pengguna dapat mendownload file menggunakan kolom capabilities.canDownload di resource files.

Untuk deskripsi jenis file yang disebutkan di sini, termasuk file blob dan Google Workspace, lihat Jenis file.

Bagian selanjutnya dari panduan ini memberikan petunjuk mendetail untuk melakukan jenis tindakan download dan ekspor ini.

Mendownload konten file blob

Untuk mendownload file blob yang disimpan di Drive, gunakan metode files.get dengan ID file yang akan didownload dan parameter URL alt=media. Parameter URL alt=media memberi tahu server bahwa download konten sedang diminta sebagai format respons alternatif.

Parameter URL alt=media adalah parameter sistem yang tersedia di semua REST API Google. Jika menggunakan library klien untuk Drive API, Anda tidak perlu menetapkan parameter ini secara eksplisit.

Contoh kode berikut menunjukkan cara menggunakan metode files.get untuk mendownload file dengan library klien Drive API.

Java

drive/snippets/drive_v3/src/main/java/DownloadFile.java
import com.google.api.client.googleapis.json.GoogleJsonResponseException;
import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.drive.Drive;
import com.google.api.services.drive.DriveScopes;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Arrays;

/* Class to demonstrate use-case of drive's download file. */
public class DownloadFile {

  /**
   * Download a Document file in PDF format.
   *
   * @param realFileId file ID of any workspace document format file.
   * @return byte array stream if successful, {@code null} otherwise.
   * @throws IOException if service account credentials file not found.
   */
  public static ByteArrayOutputStream downloadFile(String realFileId) throws IOException {
        /* Load pre-authorized user credentials from the environment.
           TODO(developer) - See https://developers.google.com/identity for
          guides on implementing OAuth2 for your application.*/
    GoogleCredentials credentials = GoogleCredentials.getApplicationDefault()
        .createScoped(Arrays.asList(DriveScopes.DRIVE_FILE));
    HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter(
        credentials);

    // Build a new authorized API client service.
    Drive service = new Drive.Builder(new NetHttpTransport(),
        GsonFactory.getDefaultInstance(),
        requestInitializer)
        .setApplicationName("Drive samples")
        .build();

    try {
      OutputStream outputStream = new ByteArrayOutputStream();

      service.files().get(realFileId)
          .executeMediaAndDownloadTo(outputStream);

      return (ByteArrayOutputStream) outputStream;
    } catch (GoogleJsonResponseException e) {
      // TODO(developer) - handle error appropriately
      System.err.println("Unable to move file: " + e.getDetails());
      throw e;
    }
  }
}

Python

drive/snippets/drive-v3/file_snippet/download_file.py
import io

import google.auth
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
from googleapiclient.http import MediaIoBaseDownload


def download_file(real_file_id):
  """Downloads a file
  Args:
      real_file_id: ID of the file to download
  Returns : IO object with location.

  Load pre-authorized user credentials from the environment.
  TODO(developer) - See https://developers.google.com/identity
  for guides on implementing OAuth2 for the application.
  """
  creds, _ = google.auth.default()

  try:
    # create drive api client
    service = build("drive", "v3", credentials=creds)

    file_id = real_file_id

    # pylint: disable=maybe-no-member
    request = service.files().get_media(fileId=file_id)
    file = io.BytesIO()
    downloader = MediaIoBaseDownload(file, request)
    done = False
    while done is False:
      status, done = downloader.next_chunk()
      print(f"Download {int(status.progress() * 100)}.")

  except HttpError as error:
    print(f"An error occurred: {error}")
    file = None

  return file.getvalue()


if __name__ == "__main__":
  download_file(real_file_id="1KuPmvGq8yoYgbfW74OENMCB5H0n_2Jm9")

Node.js

drive/snippets/drive_v3/file_snippets/download_file.js
/**
 * Downloads a file
 * @param{string} realFileId file ID
 * @return{obj} file status
 * */
async function downloadFile(realFileId) {
  // Get credentials and build service
  // TODO (developer) - Use appropriate auth mechanism for your app

  const {GoogleAuth} = require('google-auth-library');
  const {google} = require('googleapis');

  const auth = new GoogleAuth({
    scopes: 'https://www.googleapis.com/auth/drive',
  });
  const service = google.drive({version: 'v3', auth});

  fileId = realFileId;
  try {
    const file = await service.files.get({
      fileId: fileId,
      alt: 'media',
    });
    console.log(file.status);
    return file.status;
  } catch (err) {
    // TODO(developer) - Handle error
    throw err;
  }
}

PHP

drive/snippets/drive_v3/src/DriveDownloadFile.php
use Google\Client;
use Google\Service\Drive;
function downloadFile()
 {
    try {

      $client = new Client();
      $client->useApplicationDefaultCredentials();
      $client->addScope(Drive::DRIVE);
      $driveService = new Drive($client);
      $realFileId = readline("Enter File Id: ");
      $fileId = '0BwwA4oUTeiV1UVNwOHItT0xfa2M';
      $fileId = $realFileId;
      $response = $driveService->files->get($fileId, array(
          'alt' => 'media'));
      $content = $response->getBody()->getContents();
      return $content;

    } catch(Exception $e) {
      echo "Error Message: ".$e;
    }

}

.NET

drive/snippets/drive_v3/DriveV3Snippets/DownloadFile.cs
using Google.Apis.Auth.OAuth2;
using Google.Apis.Download;
using Google.Apis.Drive.v3;
using Google.Apis.Services;

namespace DriveV3Snippets
{
    // Class to demonstrate use-case of drive's download file.
    public class DownloadFile
    {
        /// <summary>
        /// Download a Document file in PDF format.
        /// </summary>
        /// <param name="fileId">file ID of any workspace document format file.</param>
        /// <returns>byte array stream if successful, null otherwise.</returns>
        public static MemoryStream DriveDownloadFile(string fileId)
        {
            try
            {
                /* Load pre-authorized user credentials from the environment.
                 TODO(developer) - See https://developers.google.com/identity for 
                 guides on implementing OAuth2 for your application. */
                GoogleCredential credential = GoogleCredential
                    .GetApplicationDefault()
                    .CreateScoped(DriveService.Scope.Drive);

                // Create Drive API service.
                var service = new DriveService(new BaseClientService.Initializer
                {
                    HttpClientInitializer = credential,
                    ApplicationName = "Drive API Snippets"
                });

                var request = service.Files.Get(fileId);
                var stream = new MemoryStream();

                // Add a handler which will be notified on progress changes.
                // It will notify on each chunk download and when the
                // download is completed or failed.
                request.MediaDownloader.ProgressChanged +=
                    progress =>
                    {
                        switch (progress.Status)
                        {
                            case DownloadStatus.Downloading:
                            {
                                Console.WriteLine(progress.BytesDownloaded);
                                break;
                            }
                            case DownloadStatus.Completed:
                            {
                                Console.WriteLine("Download complete.");
                                break;
                            }
                            case DownloadStatus.Failed:
                            {
                                Console.WriteLine("Download failed.");
                                break;
                            }
                        }
                    };
                request.Download(stream);

                return stream;
            }
            catch (Exception e)
            {
                // TODO(developer) - handle error appropriately
                if (e is AggregateException)
                {
                    Console.WriteLine("Credential Not found");
                }
                else
                {
                    throw;
                }
            }
            return null;
        }
    }
}

Contoh kode ini menggunakan metode library yang menambahkan parameter URL alt=media ke permintaan HTTP yang mendasarinya.

Download file yang dimulai dari aplikasi Anda harus diotorisasi dengan cakupan yang memungkinkan akses baca ke konten file. Misalnya, aplikasi yang menggunakan cakupan drive.readonly.metadata tidak diberi otorisasi untuk mendownload konten file. Contoh kode ini menggunakan cakupan file “drive” yang dibatasi, yang memungkinkan pengguna untuk melihat dan mengelola semua file Drive Anda. Untuk mempelajari cakupan Drive lebih lanjut, lihat Memilih cakupan Google Drive API.

Pengguna dengan izin edit dapat membatasi download oleh pengguna hanya baca melalui penetelan kolom copyRequiresWriterPermission ke false.

File yang diidentifikasi sebagai melecehkan (seperti software berbahaya) hanya dapat didownload oleh pemilik file. Selain itu, parameter kueri get acknowledgeAbuse=true harus disertakan untuk menunjukkan bahwa pengguna telah mengetahui risiko mendownload software yang berpotensi tidak diinginkan atau file penyalahgunaan lainnya. Aplikasi Anda harus memperingatkan pengguna secara interaktif sebelum menggunakan parameter kueri ini.

Download sebagian

Download sebagian hanya melibatkan download sebagian file yang ditentukan. Anda dapat menentukan bagian file yang ingin didownload menggunakan rentang byte dengan header Range. Contoh:

Range: bytes=500-999

Mendownload konten file blob pada versi sebelumnya

Untuk mendownload konten file blob pada versi sebelumnya, gunakan metode revisions.get dengan ID file yang akan didownload, ID revisi, dan parameter URL alt=media. Parameter URL alt=media memberi tahu server bahwa download konten sedang diminta sebagai format respons alternatif. Serupa dengan files.get, metode revisions.get juga menerima parameter kueri opsional acknowledgeAbuse dan header Range. Untuk informasi selengkapnya tentang mendownload revisi, lihat Mengelola revisi file.

Protokol permintaan ditampilkan di sini.

GET https://www.googleapis.com/drive/v3/files/{FILE_ID}/revisions/{REVISION_ID}?alt=media

Mendownload konten file blob di browser

Untuk mendownload konten file blob yang disimpan di Drive dalam browser, bukan melalui API, gunakan kolom webContentLink dari resource files. Jika pengguna memiliki akses download ke file, link untuk mendownload file dan isinya akan ditampilkan. Anda dapat mengalihkan pengguna ke URL ini, atau menawarkannya sebagai link yang dapat diklik.

Mendownload konten file blob selama operasi yang berjalan lama

Untuk mendownload konten file blob selama operasi yang berjalan lama, gunakan metode files.download dengan ID file yang akan didownload. Anda dapat menetapkan ID revisi secara opsional. Ini adalah satu-satunya cara untuk mendownload file Google Vids. Untuk mengetahui informasi selengkapnya, lihat Mengelola operasi yang berjalan lama.

Mengekspor konten dokumen Google Workspace

Untuk mengekspor konten byte dokumen Google Workspace, gunakan metode files.export dengan ID file yang akan diekspor dan jenis MIME yang benar. Konten yang diekspor dibatasi hingga 10 MB.

Contoh kode berikut menunjukkan cara menggunakan metode files.export untuk mengekspor dokumen Google Workspace dalam format PDF menggunakan library klien Drive API:

Java

drive/snippets/drive_v3/src/main/java/ExportPdf.java
import com.google.api.client.googleapis.json.GoogleJsonResponseException;
import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.drive.Drive;
import com.google.api.services.drive.DriveScopes;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Arrays;

/* Class to demonstrate use-case of drive's export pdf. */
public class ExportPdf {

  /**
   * Download a Document file in PDF format.
   *
   * @param realFileId file ID of any workspace document format file.
   * @return byte array stream if successful, {@code null} otherwise.
   * @throws IOException if service account credentials file not found.
   */
  public static ByteArrayOutputStream exportPdf(String realFileId) throws IOException {
    // Load pre-authorized user credentials from the environment.
    // TODO(developer) - See https://developers.google.com/identity for
    // guides on implementing OAuth2 for your application.
    GoogleCredentials credentials = GoogleCredentials.getApplicationDefault()
        .createScoped(Arrays.asList(DriveScopes.DRIVE_FILE));
    HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter(
        credentials);

    // Build a new authorized API client service.
    Drive service = new Drive.Builder(new NetHttpTransport(),
        GsonFactory.getDefaultInstance(),
        requestInitializer)
        .setApplicationName("Drive samples")
        .build();

    OutputStream outputStream = new ByteArrayOutputStream();
    try {
      service.files().export(realFileId, "application/pdf")
          .executeMediaAndDownloadTo(outputStream);

      return (ByteArrayOutputStream) outputStream;
    } catch (GoogleJsonResponseException e) {
      // TODO(developer) - handle error appropriately
      System.err.println("Unable to export file: " + e.getDetails());
      throw e;
    }
  }
}

Python

drive/snippets/drive-v3/file_snippet/export_pdf.py
import io

import google.auth
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
from googleapiclient.http import MediaIoBaseDownload


def export_pdf(real_file_id):
  """Download a Document file in PDF format.
  Args:
      real_file_id : file ID of any workspace document format file
  Returns : IO object with location

  Load pre-authorized user credentials from the environment.
  TODO(developer) - See https://developers.google.com/identity
  for guides on implementing OAuth2 for the application.
  """
  creds, _ = google.auth.default()

  try:
    # create drive api client
    service = build("drive", "v3", credentials=creds)

    file_id = real_file_id

    # pylint: disable=maybe-no-member
    request = service.files().export_media(
        fileId=file_id, mimeType="application/pdf"
    )
    file = io.BytesIO()
    downloader = MediaIoBaseDownload(file, request)
    done = False
    while done is False:
      status, done = downloader.next_chunk()
      print(f"Download {int(status.progress() * 100)}.")

  except HttpError as error:
    print(f"An error occurred: {error}")
    file = None

  return file.getvalue()


if __name__ == "__main__":
  export_pdf(real_file_id="1zbp8wAyuImX91Jt9mI-CAX_1TqkBLDEDcr2WeXBbKUY")

Node.js

drive/snippets/drive_v3/file_snippets/export_pdf.js
/**
 * Download a Document file in PDF format
 * @param{string} fileId file ID
 * @return{obj} file status
 * */
async function exportPdf(fileId) {
  const {GoogleAuth} = require('google-auth-library');
  const {google} = require('googleapis');

  // Get credentials and build service
  // TODO (developer) - Use appropriate auth mechanism for your app
  const auth = new GoogleAuth({
    scopes: 'https://www.googleapis.com/auth/drive',
  });
  const service = google.drive({version: 'v3', auth});

  try {
    const result = await service.files.export({
      fileId: fileId,
      mimeType: 'application/pdf',
    });
    console.log(result.status);
    return result;
  } catch (err) {
    // TODO(developer) - Handle error
    throw err;
  }
}

PHP

drive/snippets/drive_v3/src/DriveExportPdf.php
use Google\Client;
use Google\Service\Drive;
function exportPdf()
{
    try {
        $client = new Client();
        $client->useApplicationDefaultCredentials();
        $client->addScope(Drive::DRIVE);
        $driveService = new Drive($client);
        $realFileId = readline("Enter File Id: ");
        $fileId = '1ZdR3L3qP4Bkq8noWLJHSr_iBau0DNT4Kli4SxNc2YEo';
        $fileId = $realFileId;
        $response = $driveService->files->export($fileId, 'application/pdf', array(
            'alt' => 'media'));
        $content = $response->getBody()->getContents();
        return $content;

    }  catch(Exception $e) {
         echo "Error Message: ".$e;
    }

}

.NET

drive/snippets/drive_v3/DriveV3Snippets/ExportPdf.cs
using Google.Apis.Auth.OAuth2;
using Google.Apis.Download;
using Google.Apis.Drive.v3;
using Google.Apis.Services;

namespace DriveV3Snippets
{
    // Class to demonstrate use of Drive export pdf
    public class ExportPdf
    {
        /// <summary>
        /// Download a Document file in PDF format.
        /// </summary>
        /// <param name="fileId">Id of the file.</param>
        /// <returns>Byte array stream if successful, null otherwise</returns>
        public static MemoryStream DriveExportPdf(string fileId)
        {
            try
            {
                /* Load pre-authorized user credentials from the environment.
                 TODO(developer) - See https://developers.google.com/identity for 
                 guides on implementing OAuth2 for your application. */
                GoogleCredential credential = GoogleCredential.GetApplicationDefault()
                    .CreateScoped(DriveService.Scope.Drive);

                // Create Drive API service.
                var service = new DriveService(new BaseClientService.Initializer
                {
                    HttpClientInitializer = credential,
                    ApplicationName = "Drive API Snippets"
                });

                var request = service.Files.Export(fileId, "application/pdf");
                var stream = new MemoryStream();
                // Add a handler which will be notified on progress changes.
                // It will notify on each chunk download and when the
                // download is completed or failed.
                request.MediaDownloader.ProgressChanged +=
                    progress =>
                    {
                        switch (progress.Status)
                        {
                            case DownloadStatus.Downloading:
                            {
                                Console.WriteLine(progress.BytesDownloaded);
                                break;
                            }
                            case DownloadStatus.Completed:
                            {
                                Console.WriteLine("Download complete.");
                                break;
                            }
                            case DownloadStatus.Failed:
                            {
                                Console.WriteLine("Download failed.");
                                break;
                            }
                        }
                    };
                request.Download(stream);
                return stream;
            }
            catch (Exception e)
            {
                // TODO(developer) - handle error appropriately
                if (e is AggregateException)
                {
                    Console.WriteLine("Credential Not found");
                }
                else
                {
                    throw;
                }
            }
            return null;
        }
    }
}

Contoh kode ini menggunakan cakupan drive yang dibatasi yang memungkinkan pengguna melihat dan mengelola semua file Drive Anda. Untuk mempelajari cakupan Drive lebih lanjut, lihat Memilih cakupan Google Drive API.

Contoh kode juga mendeklarasikan jenis MIME ekspor sebagai application/pdf. Untuk daftar lengkap semua jenis MIME ekspor yang didukung untuk setiap dokumen Google Workspace, lihat Jenis MIME ekspor untuk dokumen Google Workspace.

Mengekspor konten dokumen Google Workspace di browser

Untuk mengekspor konten dokumen Google Workspace dalam browser, gunakan kolom exportLinks dari resource files. Bergantung pada jenis dokumen, link untuk mendownload file dan kontennya akan ditampilkan untuk setiap jenis MIME yang tersedia. Anda dapat mengalihkan pengguna ke URL, atau menawarkannya sebagai link yang dapat diklik.

Mengekspor konten dokumen Google Workspace pada versi sebelumnya di browser

Untuk mengekspor konten dokumen Google Workspace pada versi sebelumnya dalam browser, gunakan metode revisions.get dengan ID file yang akan didownload dan ID revisi untuk membuat link ekspor tempat Anda dapat melakukan download. Jika pengguna memiliki akses download ke file, link untuk mendownload file dan isinya akan ditampilkan. Anda dapat mengalihkan pengguna ke URL ini, atau menawarkannya sebagai link yang dapat diklik.

Mengekspor konten dokumen Google Workspace selama operasi yang berjalan lama

Untuk mengekspor konten dokumen Google Workspace selama operasi yang berjalan lama, gunakan metode files.download dengan ID file yang akan didownload dan ID revisi. Untuk informasi selengkapnya, lihat Mengelola operasi yang berjalan lama.