تنزيل الملفات وتصديرها

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

تدعم واجهة برمجة تطبيقات Google Drive أنواعًا متعددة من إجراءات التنزيل والتصدير كما هو موضح في الجدول التالي:

عمليات التنزيل
ملف تخزين البيانات الثنائية الكبيرة باستخدام طريقة files.get مع معلمة عنوان URL alt=media.
محتوى ملف تخزين البيانات في إصدار سابق باستخدام طريقة revisions.get مع معلمة عنوان URL alt=media.
محتوى ملف تخزين البيانات الثنائية الكبيرة في متصفح باستخدام حقل webContentLink.
عمليات التصدير
محتوى مستند Google Workspace بالتنسيق الذي يمكن لتطبيقك التعامل معه، باستخدام files.export.
محتوى مستند Google Workspace في متصفح باستخدام الحقل exportLinks.
محتوى مستند Google Workspace في إصدار سابق في متصفح باستخدام الحقل exportLinks.

يوفر الجزء المتبقي من هذا الدليل تعليمات تفصيلية لتنفيذ هذه الأنواع من إجراءات التنزيل والتصدير.

تنزيل محتوى ملف كائن تخزين البيانات الثنائية الكبيرة

لتنزيل ملف كائن تخزين البيانات الثنائية الكبيرة المخزن على Drive، استخدم طريقة files.get مع رقم تعريف الملف المراد تنزيله ومعلمة عنوان URL alt=media. تخبر معلمة عنوان URL alt=media الخادم بأنه يتم طلب تنزيل المحتوى كتنسيق استجابة بديل.

معلمة عنوان URL لـ alt=media هي معلمة نظام في جميع واجهات برمجة تطبيقات Google REST. إذا كنت تستخدم مكتبة عميل لواجهة برمجة تطبيقات Drive، فلا تحتاج إلى تعيين هذه المعلمة بشكل صريح.

يعرض نموذج الرمز التالي كيفية استخدام طريقة files.get لتنزيل ملف باستخدام مكتبات برامج "واجهة برمجة تطبيقات Drive".

لغة 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
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/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;
        }
    }
}

يستخدم نموذج الرمز هذا طريقة مكتبة تضيف معلمة عنوان URL alt=media إلى طلب HTTP الأساسي.

يجب أن يتم السماح بتنزيلات الملفات التي يتم بدؤها من تطبيقك باستخدام نطاق يسمح بالوصول للقراءة إلى محتوى الملف. على سبيل المثال، لا يُسمح لتطبيق يستخدم النطاق drive.readonly.metadata بتنزيل محتوى الملف. يستخدم نموذج الرمز هذا نطاق الملف "drive" المقيد الذي يسمح للمستخدمين بعرض جميع ملفات Drive وإدارتها. للتعرُّف على المزيد من المعلومات عن نطاقات Drive، يُرجى الرجوع إلى معلومات المصادقة والمصادقة الخاصة بواجهة برمجة التطبيقات.

يمكن للمستخدمين الذين يملكون أذونات التعديل تقييد التنزيل من قِبل مستخدمين للقراءة فقط من خلال إعداد الحقل copyRequiresWriterPermission على false.

لا يمكن تنزيل الملفات التي تم تحديدها على أنها مسيئة (مثل البرامج الضارة) إلا بواسطة مالك الملف. بالإضافة إلى ذلك، يجب تضمين مَعلمة طلب البحث get acknowledgeAbuse=true للإشارة إلى أن المستخدم قد اعترف بخطر تنزيل البرامج التي يُحتمل أن تكون غير مرغوب فيها أو غيرها من الملفات المسيئة. يجب أن يحذر التطبيق المستخدم بشكل تفاعلي قبل استخدام معلمة طلب البحث هذه.

تنزيل جزئي

يتضمن التنزيل الجزئي تنزيل جزء محدد فقط من الملف. يمكنك تحديد جزء الملف الذي تريد تنزيله باستخدام نطاق بايت مع رأس Range. مثلاً:

Range: bytes=500-999

تنزيل محتوى ملف الكائنات الثنائية الكبيرة في إصدار سابق

لتنزيل محتوى ملفات الكائن الثنائي الكبير (blob) في إصدار سابق، استخدم طريقة revisions.get مع رقم تعريف الملف المراد تنزيله، ورقم تعريف النسخة السابقة، ومعلمة عنوان URL alt=media. تخبر معلمة عنوان URL alt=media الخادم بأنه يتم طلب تنزيل المحتوى كتنسيق استجابة بديل. على غرار files.get، تقبل الطريقة revisions.get أيضًا معلمة طلب البحث الاختيارية acknowledgeAbuse والعنوان Range. لمزيد من المعلومات حول تنزيل النُسخ السابقة، راجع تنزيل نُسخ الملفات ونشرها.

تنزيل محتوى ملف تخزين البيانات الثنائية الكبيرة في متصفح

لتنزيل محتوى ملفات الكائن الثنائي الكبير (blob) المخزّن على Drive داخل متصفح، بدلاً من عبر واجهة برمجة التطبيقات، استخدم حقل webContentLink لمورد Files. إذا كان المستخدم لديه إمكانية الدخول إلى الملف، فسيتم عرض رابط لتنزيل الملف ومحتوياته. يمكنك إما إعادة توجيه مستخدم إلى عنوان URL هذا، أو عرضه كرابط قابل للنقر.

تصدير محتوى مستند Google Workspace

لتصدير محتوى بايت لمستند Google Workspace، استخدِم طريقة files.export مع رقم تعريف الملف المراد تصديره ونوع MIME الصحيح. يقتصر المحتوى الذي يتم تصديره على 10 ميغابايت.

يعرض نموذج الرمز البرمجي التالي طريقة استخدام طريقة files.export لتصدير مستند Google Workspace بتنسيق PDF باستخدام مكتبات برامج واجهة برمجة تطبيقات Drive:

لغة 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
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/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;
        }
    }
}

يستخدم نموذج الرمز هذا نطاق drive المقيد الذي يسمح للمستخدمين بعرض جميع ملفات Drive وإدارتها. لمعرفة المزيد عن نطاقات Drive، يُرجى الرجوع إلى معلومات المصادقة والمصادقة الخاصة بواجهة برمجة التطبيقات.

يعلن نموذج الرمز أيضًا عن نوع تصدير MIME على أنه application/pdf. للحصول على قائمة كاملة بجميع أنواع MIME للتصدير المتوافقة مع كل مستند من مستندات Google Workspace، يُرجى الرجوع إلى تصدير أنواع MIME لمستندات Google Workspace.

تصدير محتوى مستند Google Workspace في متصفِّح

لتصدير محتوى مستند Google Workspace داخل متصفح، استخدِم حقل exportLinks في مورد Files. وفقًا لنوع المستند، يتم عرض رابط لتنزيل الملف ومحتوياته لكل نوع MIME متاح. يمكنك إما إعادة توجيه المستخدم إلى عنوان URL، أو عرضه كرابط قابل للنقر.

تصدير محتوى مستند Google Workspace إلى إصدار سابق في متصفّح

لتصدير محتوى مستند Google Workspace في إصدار سابق ضمن متصفِّح، استخدِم طريقة revisions.get مع رقم تعريف الملف المراد تنزيله ورقم تعريف النسخة السابقة. إذا كان المستخدم لديه إمكانية تنزيل الملف، يتم عرض رابط لتنزيل الملف ومحتواه. يمكنك إما إعادة توجيه مستخدم إلى عنوان URL هذا، أو عرضه كرابط قابل للنقر.