Mendownload & amp; mengekspor file

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

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

Download konten
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.
Ekspor
Konten dokumen Google Workspace dalam format yang dapat ditangani aplikasi Anda, menggunakan files.export.
Konten dokumen Google Workspace di browser menggunakan kolom exportLinks.
Konten dokumen Google Workspace pada versi sebelumnya di browser menggunakan kolom exportLinks.

Bagian lainnya dalam panduan ini memberikan petunjuk terperinci 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 untuk 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 Google REST API. 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/cuplikan/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/cuplikan/drive-v3/file_snippet/download_file.py
from __future__ import print_function

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/cuplikan/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/cuplikan/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/DriveV3Cuplikans/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 diizinkan untuk mendownload konten file. Contoh kode ini menggunakan cakupan file “drive” yang dibatasi, yang memungkinkan pengguna melihat dan mengelola semua file Drive Anda. Untuk mempelajari cakupan Drive lebih lanjut, baca informasi autentikasi dan otorisasi khusus API.

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

File yang diidentifikasi sebagai penyalahgunaan (seperti software berbahaya) hanya dapat didownload oleh pemilik file. Selain itu, parameter kueri get acknowledgeAbuse=true harus disertakan untuk menunjukkan bahwa pengguna telah menyadari 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 mencakup mendownload sebagian file. Anda dapat menentukan bagian file yang ingin didownload menggunakan rentang byte dengan header Range. Contoh:

Range: bytes=500-999

Mendownload konten file blob di versi sebelumnya

Untuk mendownload konten file blob di versi sebelumnya, gunakan metode revisions.get dengan ID file untuk didownload, ID revisi, dan parameter URL alt=media. Parameter URL alt=media memberi tahu server bahwa download konten 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 Mendownload dan memublikasikan revisi file.

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 tersebut dan kontennya akan ditampilkan. Anda dapat mengalihkan pengguna ke URL ini, atau menawarkannya sebagai link yang dapat diklik.

Mengekspor konten dokumen Google Workspace

Untuk mengekspor konten byte dokumen Google Workspace, gunakan metode files.export dengan ID file untuk 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/cuplikan/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/cuplikan/drive-v3/file_snippet/export_pdf.py
from __future__ import print_function

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/cuplikan/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/cuplikan/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/DriveV3Cuplikans/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, baca informasi otorisasi dan autentikasi khusus API.

Contoh kode ini juga mendeklarasikan jenis MIME ekspor sebagai application/pdf. Untuk mengetahui daftar lengkap semua jenis MIME ekspor yang didukung untuk setiap dokumen Google Workspace, lihat Mengekspor jenis MIME 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 dokumennya, link untuk mendownload file tersebut 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 versi sebelumnya di browser

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