फ़ाइल डेटा अपलोड करें

Google Drive API की मदद से, किसी फ़ाइल को बनाते समय या अपडेट करते समय फ़ाइल डेटा अपलोड किया जा सकता है File. यह जानने के लिए कि सिर्फ़ मेटाडेटा वाली फ़ाइल, जैसे कि फ़ोल्डर, सिर्फ़ मेटाडेटा वाली फ़ाइलें बनाना देखें.

इस तरह के वीडियो अपलोड किए जा सकते हैं:

  • आसान अपलोड (uploadType=media): छोटी मीडिया फ़ाइल (पांच एमबी या इससे कम) जिसमें मेटाडेटा नहीं दिया गया हो. यह करने के लिए सामान्य अपलोड के लिए, आसान अपलोड करें देखें.

  • एक से ज़्यादा हिस्सों वाला अपलोड (uploadType=multipart): "इस अपलोड टाइप का इस्तेमाल करके पांच एमबी या इससे कम की छोटी फ़ाइल को, फ़ाइल को एक ही अनुरोध में सबमिट किया जा सकता है. कई हिस्सों में अपलोड करने के लिए, कई हिस्सों में अपलोड करें.

  • फिर से शुरू किया जा सकने वाला अपलोड (uploadType=resumable): इस अपलोड टाइप का इस्तेमाल बड़ी फ़ाइलें (5 एमबी से ज़्यादा) और नेटवर्क की संभावना ज़्यादा होने पर जैसे कि किसी मोबाइल ऐप्लिकेशन से फ़ाइल बनाते समय. फिर से शुरू किया जा सकता है अपलोड करना भी ज़्यादातर ऐप्लिकेशन के लिए अच्छा विकल्प होता है, क्योंकि ये काम करते हैं हर अपलोड के लिए, कम से कम एक एचटीटीपी अनुरोध की मदद से, छोटी फ़ाइलों के लिए साइन अप किया जा सकता है. फिर से शुरू किए जाने लायक अपलोड करने के लिए, फिर से शुरू किए जा सकने वाले वीडियो चलाना शुरू करें" अपलोड करें.

Google API क्लाइंट लाइब्रेरी इनमें से कम से कम एक तरह की फ़ाइल लागू करती है: अपलोड. क्लाइंट लाइब्रेरी देखें दस्तावेज़ पाएं, ताकि इनमें से हर एक टाइप का इस्तेमाल करें.

PATCH बनाम PUT का इस्तेमाल करें

रीफ़्रेशर के तौर पर, एचटीटीपी क्रिया PATCH एक आंशिक फ़ाइल रिसॉर्स अपडेट के साथ काम करती है जबकि एचटीटीपी क्रिया PUT पूरी तरह से रिसॉर्स को बदलने की सुविधा देती है. ध्यान दें कि PUT किसी मौजूदा संसाधन में नया फ़ील्ड जोड़ते समय, नुकसान पहुंचा सकने वाले बदलाव लागू कर सकता है.

फ़ाइल के संसाधन को अपलोड करते समय, इन दिशा-निर्देशों का पालन करें:

  • इसके शुरुआती अनुरोध के लिए, एपीआई रेफ़रंस में बताई गई एचटीटीपी क्रिया का इस्तेमाल करें फिर से शुरू करने लायक अपलोड या किसी सामान्य या कई हिस्सों में किए गए अपलोड के अनुरोध के लिए.
  • फिर से शुरू किए जाने लायक अपलोड के लिए बाद के सभी अनुरोधों के लिए PUT का इस्तेमाल करें. ऐसा करने के लिए, एक बार अनुरोध शुरू हो गया है. ये अनुरोध कॉन्टेंट अपलोड कर रहे हैं, भले ही का तरीका बताया जा रहा है.

आसानी से अपलोड करें

आसानी से अपलोड करने के लिए, files.create तरीका इनके साथ uploadType=media.

सामान्य तरीके से डेटा अपलोड करने का तरीका नीचे बताया गया है:

HTTP

  1. क्वेरी के साथ तरीके के /upload यूआरआई के लिए POST अनुरोध बनाएं uploadType=media का पैरामीटर:

    POST https://www.googleapis.com/upload/drive/v3/files?uploadType=media

  2. अनुरोध के मुख्य हिस्से में फ़ाइल का डेटा जोड़ें.

  3. ये एचटीटीपी हेडर जोड़ें:

    • Content-Type. ऑब्जेक्ट के MIME मीडिया टाइप पर सेट करें अपलोड किया गया.
    • Content-Length. अपलोड किए जाने वाले बाइट की संख्या पर सेट करें. अगर आपको डेटा को कोड में बदलने का तरीका, इस हेडर की ज़रूरत नहीं है.
  4. अनुरोध भेजें. अनुरोध पूरा होने पर सर्वर, फ़ाइल के मेटाडेटा के साथ HTTP 200 OK स्टेटस कोड भी दिखाता है. {HTTP}

सामान्य तौर पर डेटा अपलोड करने पर, बेसिक मेटाडेटा और कुछ एट्रिब्यूट बन जाते हैं फ़ाइल के आधार पर अनुमान लगाए जाते हैं, जैसे कि MIME टाइप या modifiedTime. इस्तेमाल करने के लिए उन मामलों में एक सामान्य अपलोड जहां आपकी फ़ाइलें छोटी हों और फ़ाइल मेटाडेटा अहम है.

एक से ज़्यादा हिस्सों वाला अपलोड करें

कई हिस्सों में अपलोड करने की सुविधा की मदद से, मेटाडेटा और डेटा को दोनों हिस्सों में एक साथ अपलोड किया जा सकता है अनुरोध. अगर भेजा जाने वाला डेटा इतना छोटा है कि उसे फिर से अपलोड किया जा सकता है, तो इस विकल्प का इस्तेमाल करें. पूरी तरह से, अगर कनेक्शन विफल हो जाता है.

कई हिस्सों वाला अपलोड करने के लिए, files.create तरीका इनके साथ uploadType=multipart.

एक से ज़्यादा हिस्सों में डेटा अपलोड करने का तरीका यहां बताया गया है:

Java

drive/snippets/drive_v3/src/main/java/UploadBasic.java
import com.google.api.client.googleapis.json.GoogleJsonResponseException;
import com.google.api.client.http.FileContent;
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.api.services.drive.model.File;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.util.Arrays;

/* Class to demonstrate use of Drive insert file API */
public class UploadBasic {

  /**
   * Upload new file.
   *
   * @return Inserted file metadata if successful, {@code null} otherwise.
   * @throws IOException if service account credentials file not found.
   */
  public static String uploadBasic() 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();
    // Upload file photo.jpg on drive.
    File fileMetadata = new File();
    fileMetadata.setName("photo.jpg");
    // File's content.
    java.io.File filePath = new java.io.File("files/photo.jpg");
    // Specify media type and file-path for file.
    FileContent mediaContent = new FileContent("image/jpeg", filePath);
    try {
      File file = service.files().create(fileMetadata, mediaContent)
          .setFields("id")
          .execute();
      System.out.println("File ID: " + file.getId());
      return file.getId();
    } catch (GoogleJsonResponseException e) {
      // TODO(developer) - handle error appropriately
      System.err.println("Unable to upload file: " + e.getDetails());
      throw e;
    }
  }
}

Python

drive/snippets/drive-v3/file_snippet/upload_basic.py
import google.auth
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
from googleapiclient.http import MediaFileUpload


def upload_basic():
  """Insert new file.
  Returns : Id's of the file uploaded

  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_metadata = {"name": "download.jpeg"}
    media = MediaFileUpload("download.jpeg", mimetype="image/jpeg")
    # pylint: disable=maybe-no-member
    file = (
        service.files()
        .create(body=file_metadata, media_body=media, fields="id")
        .execute()
    )
    print(f'File ID: {file.get("id")}')

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

  return file.get("id")


if __name__ == "__main__":
  upload_basic()

Node.js

drive/snippets/drive_v3/file_snippets/upload_basic.js
/**
 * Insert new file.
 * @return{obj} file Id
 * */
async function uploadBasic() {
  const fs = require('fs');
  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});
  const requestBody = {
    name: 'photo.jpg',
    fields: 'id',
  };
  const media = {
    mimeType: 'image/jpeg',
    body: fs.createReadStream('files/photo.jpg'),
  };
  try {
    const file = await service.files.create({
      requestBody,
      media: media,
    });
    console.log('File Id:', file.data.id);
    return file.data.id;
  } catch (err) {
    // TODO(developer) - Handle error
    throw err;
  }
}

PHP

drive/snippets/drive_v3/src/DriveUploadBasic.php
use Google\Client;
use Google\Service\Drive;
# TODO - PHP client currently chokes on fetching start page token
function uploadBasic()
{
    try {
        $client = new Client();
        $client->useApplicationDefaultCredentials();
        $client->addScope(Drive::DRIVE);
        $driveService = new Drive($client);
        $fileMetadata = new Drive\DriveFile(array(
        'name' => 'photo.jpg'));
        $content = file_get_contents('../files/photo.jpg');
        $file = $driveService->files->create($fileMetadata, array(
            'data' => $content,
            'mimeType' => 'image/jpeg',
            'uploadType' => 'multipart',
            'fields' => 'id'));
        printf("File ID: %s\n", $file->id);
        return $file->id;
    } catch(Exception $e) {
        echo "Error Message: ".$e;
    } 

}

.NET

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

namespace DriveV3Snippets
{
    // Class to demonstrate use of Drive insert file API
    public class UploadBasic
    {
        /// <summary>
        /// Upload new file.
        /// </summary>
        /// <param name="filePath">Image path to upload.</param>
        /// <returns>Inserted file metadata if successful, null otherwise.</returns>
        public static string DriveUploadBasic(string filePath)
        {
            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"
                });

                // Upload file photo.jpg on drive.
                var fileMetadata = new Google.Apis.Drive.v3.Data.File()
                {
                    Name = "photo.jpg"
                };
                FilesResource.CreateMediaUpload request;
                // Create a new file on drive.
                using (var stream = new FileStream(filePath,
                           FileMode.Open))
                {
                    // Create a new file, with metadata and stream.
                    request = service.Files.Create(
                        fileMetadata, stream, "image/jpeg");
                    request.Fields = "id";
                    request.Upload();
                }

                var file = request.ResponseBody;
                // Prints the uploaded file id.
                Console.WriteLine("File ID: " + file.Id);
                return file.Id;
            }
            catch (Exception e)
            {
                // TODO(developer) - handle error appropriately
                if (e is AggregateException)
                {
                    Console.WriteLine("Credential Not found");
                }
                else if (e is FileNotFoundException)
                {
                    Console.WriteLine("File not found");
                }
                else
                {
                    throw;
                }
            }
            return null;
        }
    }
}

HTTP

  1. क्वेरी के साथ तरीके के /upload यूआरआई के लिए POST अनुरोध बनाएं uploadType=multipart का पैरामीटर:

    POST https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart

  2. अनुरोध का मुख्य हिस्सा तैयार करें. शरीर को एक से ज़्यादा हिस्सों वाले/मिलते-जुलते कॉन्टेंट का टाइप RFC 2387, इसमें दो हिस्से होते हैं:

    • मेटाडेटा. मेटाडेटा सबसे पहले आना चाहिए और एक Content-Type होना चाहिए हेडर को application/json; charset=UTF-8 पर सेट किया गया. फ़ाइल का मेटाडेटा जोड़ें JSON फ़ॉर्मैट में होना चाहिए.
    • मीडिया. मीडिया बाद में आना चाहिए और उसमें Content-Type हेडर होना चाहिए का उपयोग कर सकते हैं. मीडिया वाले हिस्से में फ़ाइल का डेटा जोड़ें.

    हर हिस्से की पहचान सीमा स्ट्रिंग से करें, जिसके पहले दो हाइफ़न होते हैं. तय सीमा में इसके अलावा, अंतिम सीमा स्ट्रिंग के बाद दो हाइफ़न जोड़ें.

  3. इन टॉप लेवल एचटीटीपी हेडर को जोड़ें:

    • Content-Type. multipart/related पर सेट करें और सीमा शामिल करें स्ट्रिंग का इस्तेमाल करें, जिसका इस्तेमाल अनुरोध के अलग-अलग हिस्सों की पहचान करने के लिए किया जा रहा है. इसके लिए उदाहरण: Content-Type: multipart/related; boundary=foo_bar_baz
    • Content-Length. अनुरोध के मुख्य हिस्से में बाइट की कुल संख्या पर सेट करें.
  4. अनुरोध भेजें.

सिर्फ़ मेटाडेटा वाला हिस्सा बनाने या अपडेट करने के लिए, उससे जुड़े डेटा के बिना, स्टैंडर्ड रिसॉर्स एंडपॉइंट पर POST या PATCH का अनुरोध भेजें: https://www.googleapis.com/drive/v3/files अगर अनुरोध सफल होता है, सर्वर, फ़ाइल केHTTP 200 OK मेटाडेटा.

फ़ाइलें बनाते समय, उन्हें फ़ाइल के name में फ़ाइल एक्सटेंशन तय करना चाहिए फ़ील्ड. उदाहरण के लिए, एक फ़ोटो JPEG फ़ाइल बनाते समय, आप कुछ निर्दिष्ट कर सकते हैं जैसे कि मेटाडेटा में "name": "photo.jpg". files.get पर बाद में किए जाने वाले कॉल, सिर्फ़ रीड-ओनली fileExtension प्रॉपर्टी लौटाते हैं इसमें name फ़ील्ड में मूल रूप से बताया गया एक्सटेंशन शामिल है.

फिर से शुरू करने लायक अपलोड करें

फिर से शुरू किए जाने लायक अपलोड से आप कम्यूनिकेशन के बाद अपलोड कार्रवाई फिर से शुरू कर सकते हैं गड़बड़ी होने की वजह से, डेटा का फ़्लो कम हो जाता है. क्योंकि आपको बड़ा रीस्टार्ट नहीं करना है फ़ाइल अपलोड करते हैं, तो फिर से शुरू होने वाले अपलोड से भी आपकी बैंडविथ कम हो सकती है नेटवर्क में गड़बड़ी होने पर इस्तेमाल करें.

फिर से शुरू किए जा सकने वाले अपलोड तब कारगर होते हैं, जब आपकी फ़ाइल का साइज़ काफ़ी अलग हो या अनुरोधों के लिए एक तय समयसीमा है. जैसे, मोबाइल ओएस के लिए बैकग्राउंड में होने वाले टास्क और App Engine के कुछ अनुरोध). आप ऐसी स्थितियां जिनमें आपको अपलोड का प्रोग्रेस बार दिखाना है.

फिर से शुरू किए जा सकने वाले अपलोड में कई हाई-लेवल के चरण शामिल होते हैं:

  1. शुरुआती अनुरोध भेजें और फिर से शुरू किए जाने वाले सेशन का यूआरआई फिर से पाएं.
  2. डेटा अपलोड करें और अपलोड की स्थिति को मॉनिटर करें.
  3. (ज़रूरी नहीं) अगर अपलोड करने में कोई गड़बड़ी हुई है, तो फिर से अपलोड करना शुरू करें.

शुरुआती अनुरोध भेजें

फिर से शुरू किए जा सकने वाले अपलोड को शुरू करने के लिए, files.create तरीका इनके साथ uploadType=resumable.

HTTP

  1. क्वेरी के साथ तरीके के /upload यूआरआई के लिए POST अनुरोध बनाएं uploadType=resumable का पैरामीटर:

    POST https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable

    अगर अनुरोध स्वीकार किया जाता है, तो जवाब में 200 OK शामिल होता है एचटीटीपी स्टेटस कोड. इसके अलावा, इसमें एक Location हेडर शामिल होता है, जो फिर से शुरू किए जा सकने वाले सेशन यूआरआई के बारे में बताता है:

    HTTP/1.1 200 OK
    Location: https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable&upload_id=xa298sd_sdlkj2
    Content-Length: 0
    

    फिर से शुरू किए जा सकने वाले सेशन यूआरआई को सेव करें, ताकि आप फ़ाइल का डेटा और क्वेरी अपलोड कर सकें अपलोड स्थिति. फिर से शुरू किए जा सकने वाले सेशन यूआरआई की समयसीमा एक हफ़्ते बाद खत्म हो जाती है.

  2. अगर आपके पास फ़ाइल का मेटाडेटा है, तो अनुरोध के मुख्य हिस्से में मेटाडेटा जोड़ें JSON फ़ॉर्मैट में होना चाहिए. अगर ऐसा नहीं है, तो अनुरोध का मुख्य हिस्सा खाली छोड़ दें.

  3. ये एचटीटीपी हेडर जोड़ें:

    • X-Upload-Content-Type. ज़रूरी नहीं. फ़ाइल के MIME प्रकार पर सेट करें जिसे बाद के अनुरोधों में ट्रांसफ़र किया जाता है. अगर MIME टाइप डेटा को मेटाडेटा में या इस हेडर के ज़रिए दिखाया नहीं जाता, ऑब्जेक्ट को application/octet-stream. के तौर पर दिखाया जाता है
    • X-Upload-Content-Length. ज़रूरी नहीं. इसकी बाइट की संख्या पर सेट करें फ़ाइल डेटा, जिसे बाद के अनुरोधों में ट्रांसफ़र किया जाता है.
    • Content-Type. अगर आपके पास फ़ाइल के लिए मेटाडेटा है, तो ज़रूरी है. इस पर सेट करें application/json; charset=UTF-8.
    • Content-Length. अगर डेटा को ट्रांसफ़र करने के कई हिस्सों में बदलाव करने की ज़रूरत नहीं है, तो इसे इस्तेमाल करना ज़रूरी है. इस शुरुआती अनुरोध के मुख्य भाग में बाइट की संख्या पर सेट करें.
  4. अनुरोध भेजें. अगर सेशन शुरू करने का अनुरोध सफल होता है, तो रिस्पॉन्स में 200 OK HTTP स्टेटस कोड शामिल है. इसके अलावा, जवाब इसमें एक Location हेडर शामिल है, जो फिर से शुरू किए जा सकने वाले सेशन यूआरआई के बारे में बताता है. फ़ाइल डेटा अपलोड करने और अपलोड की स्थिति. फिर से शुरू किए जा सकने वाले सेशन यूआरआई की समयसीमा एक हफ़्ते बाद खत्म हो जाती है.

  5. फिर से शुरू किए जा सकने वाले सेशन के यूआरएल को कॉपी करें और सेव करें.

  6. कॉन्टेंट अपलोड करना जारी रखें.

कॉन्टेंट अपलोड करना

फिर से शुरू किए जाने वाले सेशन वाली फ़ाइल को अपलोड करने के दो तरीके हैं:

  • एक ही अनुरोध में कॉन्टेंट अपलोड करना: इस तरीके का इस्तेमाल तब करें, जब फ़ाइल अगर किसी एक अवधि के लिए कोई समयसीमा तय नहीं है, तो एक ही अनुरोध में कई दस्तावेज़ अपलोड करें अनुरोध है या आपको अपलोड की प्रोग्रेस दिखाने वाले इंडिकेटर की ज़रूरत नहीं है. यह का तरीका सबसे अच्छा है, क्योंकि इसे कम अनुरोधों की ज़रूरत होती है और नतीजे परफ़ॉर्मेंस.
  • कॉन्टेंट को कई हिस्सों में अपलोड करें: अगर ज़रूरी हो, तो इस तरीके का इस्तेमाल करें किसी एक अनुरोध में ट्रांसफ़र किए जाने वाले डेटा को कम करने के लिए किया जा सकता है. आपको इनकी ज़रूरत पड़ सकती है ताकि किसी व्यक्ति के लिए तय समयसीमा होने पर, ट्रांसफ़र होने वाले डेटा को कम किया जा सके अनुरोध करते हैं, जैसा कि App Engine अनुरोधों की कुछ क्लास के मामले में होता है. यह तरीका तब भी फ़ायदेमंद होता है, जब आपको अपलोड की स्थिति दिखाती है.

एचटीटीपी - एक अनुरोध

  1. फिर से शुरू किए जा सकने वाले सेशन यूआरआई के लिए, PUT अनुरोध बनाएं.
  2. अनुरोध के मुख्य हिस्से में फ़ाइल का डेटा जोड़ें.
  3. कॉन्टेंट की लंबाई वाला एचटीटीपी हेडर जोड़ें. यह हेडर, फ़ाइल में बाइट की संख्या पर सेट किया गया हो.
  4. अनुरोध भेजें. अगर अपलोड करने के अनुरोध में रुकावट आती है या आपको 5xx जवाब, जो अपलोड रुक गया था उसे फिर से शुरू करने के तरीके में दी गई प्रोसेस अपनाएं.

एचटीटीपी - एक से ज़्यादा अनुरोध

  1. फिर से शुरू किए जा सकने वाले सेशन यूआरआई के लिए, PUT अनुरोध बनाएं.

  2. अनुरोध के मुख्य हिस्से में डेटा समूह का डेटा जोड़ें. के गुणज में भाग बनाएं 256 केबी (256 x 1024 बाइट) का साइज़. हालांकि, फ़ाइल के आखिरी हिस्से को छोड़कर जो पूरा हो जाता है अपलोड करें. डेटा वाले हिस्से का साइज़ जितना हो सके उतना बड़ा रखें, ताकि किया जा सकता है.

  3. ये एचटीटीपी हेडर जोड़ें:

    • Content-Length. मौजूदा डेटा ग्रुप में बाइट की संख्या पर सेट करें.
    • Content-Range. यह दिखाने के लिए सेट करें कि आपने फ़ाइल में किन बाइट को अपलोड किया है. इसके लिए उदाहरण के लिए, Content-Range: bytes 0-524287/2000000 दिखाता है कि आप 20,00,000 बाइट वाली फ़ाइल में पहली 5,24,288 बाइट (256 x 1024 x 2) होंगी.
  4. अनुरोध भेजें और जवाब को प्रोसेस करें. अगर अपलोड करने का अनुरोध रुकावट आई है या अगर आपको 5xx जवाब मिलता है, तो जो अपलोड पूरा नहीं हुआ उसे फिर से शुरू करें.

  5. फ़ाइल में मौजूद हर डेटा सेगमेंट के लिए, पहले से लेकर चौथे चरण तक दोहराएं. इसका इस्तेमाल करें जवाब में Range हेडर, ताकि यह तय किया जा सके कि अगला ग्रुप कहां से शुरू करना है. यह न मानें कि पिछले अनुरोध में भेजी गई सभी बाइट सर्वर को मिल गई हैं.

पूरी फ़ाइल अपलोड होने पर, आपको 200 OK या 201 Created जवाब और संसाधन से जुड़ा मेटाडेटा.

जो अपलोड पूरा नहीं हुआ उसे फिर से शुरू करें

अगर अपलोड करने का अनुरोध, जवाब देने से पहले ही रद्द कर दिया जाता है या आपको 503 Service Unavailable जवाब मिलता है, तो आपको बीच में रोके गए अपलोड को फिर से शुरू करना होगा.

HTTP

  1. अपलोड स्थिति का अनुरोध करने के लिए, एक खाली PUT अनुरोध फिर से शुरू किया जा सकने वाला सेशन यूआरआई.

  2. Content-Range हेडर जोड़कर यह बताएं कि फ़ाइल अज्ञात है. उदाहरण के लिए, Content-Range को */2000000 पर सेट करें, अगर आपके फ़ाइल की कुल लंबाई 20,00,000 बाइट है. अगर आपको इसका पूरा साइज़ नहीं पता है, फ़ाइल में, Content-Range को */* पर सेट करें.

  3. अनुरोध भेजें.

  4. जवाब को प्रोसेस करें:

    • 200 OK या 201 Created जवाब से पता चलता है कि अपलोड पूरा हो चुका है और आगे कोई कार्रवाई करने की ज़रूरत नहीं है.
    • 308 Resume Incomplete जवाब का मतलब है कि आपको प्रोसेस जारी रखनी है फ़ाइल अपलोड करने के लिए.
    • 404 Not Found रिस्पॉन्स से पता चलता है कि अपलोड सेशन खत्म हो गया है और अपलोड को फिर से शुरू करना चाहिए.
  5. अगर आपको 308 Resume Incomplete से जवाब मिला है, तो जवाब का Range हेडर, जिससे यह तय किया जाता है कि सर्वर को कितनी बाइट मिली हैं. अगर रिस्पॉन्स में Range हेडर नहीं है, कोई बाइट नहीं मिली है. उदाहरण के लिए, bytes=0-42 का Range हेडर दिखाता है कि पहले फ़ाइल के 43 बाइट मिल गए और अगले हिस्से को अपलोड करने के लिए बाइट 44 से शुरू होगा.

  6. अब आपको पता है कि अपलोड को कहां से शुरू करना है, तो फ़ाइल अपलोड करना जारी रखें अगले बाइट से शुरू होता है. शामिल करें Content-Range हेडर, जिससे पता चलता है कि फ़ाइल का कौनसा हिस्सा भेजा जा रहा है. इसके लिए उदाहरण के लिए, Content-Range: bytes 43-1999999 से पता चलता है कि 44 से लेकर 20,00,000 तक बाइट भेजें.

मीडिया अपलोड करने में आने वाली गड़बड़ियां ठीक करना

मीडिया अपलोड करते समय, गड़बड़ियों को ठीक करने के लिए ये सबसे सही तरीके अपनाएं:

  • 5xx गड़बड़ियों के लिए, उन अपलोड को फिर से शुरू करें या फिर से अपलोड करने की कोशिश करें जो कनेक्शन की वजह से नहीं हो सके रुकावटों से बचाती हैं. 5xx गड़बड़ियों को ठीक करने के बारे में ज़्यादा जानकारी के लिए, यह लेख पढ़ें 500, 502, 503, 504 गड़बड़ियां.
  • 403 rate limit गड़बड़ियों के लिए, फिर से अपलोड करने की कोशिश करें. इसके बारे में ज़्यादा जानकारी पाने के लिए, 403 rate limit त्रुटियां प्रबंधित करना, 403 त्रुटि देखें: rateLimitExceeded.
  • फिर से शुरू किए जाने लायक अपलोड के दौरान, 4xx गड़बड़ी (इसमें 403 भी शामिल है) के लिए, रीस्टार्ट करें अपलोड करें. इन गड़बड़ियों का मतलब है कि अपलोड सेशन खत्म हो गया है और ऐसा होना चाहिए नए सेशन यूआरआई का अनुरोध करके रीस्टार्ट किया जाता है. सेशन अपलोड करें एक हफ़्ते तक कोई गतिविधि न होने पर भी यह समयसीमा खत्म हो जाएगी.

Google Docs टाइप में इंपोर्ट करें

जब आप डिस्क में कोई फ़ाइल बनाते हैं, तो हो सकता है कि आप किसी Google Workspace फ़ाइल टाइप में सेव करना हो, जैसे कि Google Docs या शीट. उदाहरण के लिए, हो सकता है कि आप किसी दस्तावेज़ को Google दस्तावेज़ में अपने पसंदीदा वर्ड प्रोसेसर की सुविधाएँ.

किसी फ़ाइल को किसी खास Google Workspace फ़ाइल टाइप में बदलने के लिए, फ़ाइल बनाते समय, Google Workspace mimeType का इस्तेमाल करें.

किसी CSV फ़ाइल को Google Workspace शीट में बदलने का तरीका यहां बताया गया है:

Java

drive/snippets/drive_v3/src/main/java/UploadWithConversion.java
import com.google.api.client.googleapis.json.GoogleJsonResponseException;
import com.google.api.client.http.FileContent;
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.api.services.drive.model.File;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.util.Arrays;

/* Class to demonstrate Drive's upload with conversion use-case. */
public class UploadWithConversion {

  /**
   * Upload file with conversion.
   *
   * @return Inserted file id if successful, {@code null} otherwise.
   * @throws IOException if service account credentials file not found.
   */
  public static String uploadWithConversion() 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();

    // File's metadata.
    File fileMetadata = new File();
    fileMetadata.setName("My Report");
    fileMetadata.setMimeType("application/vnd.google-apps.spreadsheet");

    java.io.File filePath = new java.io.File("files/report.csv");
    FileContent mediaContent = new FileContent("text/csv", filePath);
    try {
      File file = service.files().create(fileMetadata, mediaContent)
          .setFields("id")
          .execute();
      System.out.println("File ID: " + file.getId());
      return file.getId();
    } 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/upload_with_conversion.py
import google.auth
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
from googleapiclient.http import MediaFileUpload


def upload_with_conversion():
  """Upload file with conversion
  Returns: ID of the file uploaded

  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_metadata = {
        "name": "My Report",
        "mimeType": "application/vnd.google-apps.spreadsheet",
    }
    media = MediaFileUpload("report.csv", mimetype="text/csv", resumable=True)
    # pylint: disable=maybe-no-member
    file = (
        service.files()
        .create(body=file_metadata, media_body=media, fields="id")
        .execute()
    )
    print(f'File with ID: "{file.get("id")}" has been uploaded.')

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

  return file.get("id")


if __name__ == "__main__":
  upload_with_conversion()

Node.js

drive/snippets/drive_v3/file_snippets/upload_with_conversion.js
/**
 * Upload file with conversion
 * @return{obj} file Id
 * */
async function uploadWithConversion() {
  const fs = require('fs');
  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});
  const fileMetadata = {
    name: 'My Report',
    mimeType: 'application/vnd.google-apps.spreadsheet',
  };
  const media = {
    mimeType: 'text/csv',
    body: fs.createReadStream('files/report.csv'),
  };

  try {
    const file = await service.files.create({
      requestBody: fileMetadata,
      media: media,
      fields: 'id',
    });
    console.log('File Id:', file.data.id);
    return file.data.id;
  } catch (err) {
    // TODO(developer) - Handle error
    throw err;
  }
}

PHP

drive/snippets/drive_v3/src/DriveUploadWithConversion.php
use Google\Client;
use Google\Service\Drive;
function uploadWithConversion()
{
    try {
        $client = new Client();
        $client->useApplicationDefaultCredentials();
        $client->addScope(Drive::DRIVE);
        $driveService = new Drive($client);
        $fileMetadata = new Drive\DriveFile(array(
            'name' => 'My Report',
            'mimeType' => 'application/vnd.google-apps.spreadsheet'));
        $content = file_get_contents('../files/report.csv');
        $file = $driveService->files->create($fileMetadata, array(
            'data' => $content,
            'mimeType' => 'text/csv',
            'uploadType' => 'multipart',
            'fields' => 'id'));
        printf("File ID: %s\n", $file->id);
        return $file->id;
    } catch(Exception $e) {
        echo "Error Message: ".$e;
    }

}

.NET

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

namespace DriveV3Snippets
{
    // Class to demonstrate Drive's upload with conversion use-case.
    public class UploadWithConversion
    {
        /// <summary>
        /// Upload file with conversion.
        /// </summary>
        /// <param name="filePath">Id of the spreadsheet file.</param>
        /// <returns>Inserted file id if successful, null otherwise.</returns>
        public static string DriveUploadWithConversion(string filePath)
        {
            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"
                });

                // Upload file My Report on drive.
                var fileMetadata = new Google.Apis.Drive.v3.Data.File()
                {
                    Name = "My Report",
                    MimeType = "application/vnd.google-apps.spreadsheet"
                };
                FilesResource.CreateMediaUpload request;
                // Create a new drive.
                using (var stream = new FileStream(filePath,
                           FileMode.Open))
                {
                    // Create a new file, with metadata and stream.
                    request = service.Files.Create(
                        fileMetadata, stream, "text/csv");
                    request.Fields = "id";
                    request.Upload();
                }

                var file = request.ResponseBody;
                // Prints the uploaded file id.
                Console.WriteLine("File ID: " + file.Id);
                return file.Id;
            }
            catch (Exception e)
            {
                // TODO(developer) - handle error appropriately
                if (e is AggregateException)
                {
                    Console.WriteLine("Credential Not found");
                }
                else if (e is FileNotFoundException)
                {
                    Console.WriteLine("File not found");
                }
                else
                {
                    throw;
                }
            }
            return null;
        }
    }
}

कन्वर्ज़न उपलब्ध है या नहीं, यह देखने के लिए फ़ाइल बनाने से पहले about संसाधन का importFormats कलेक्शन देखें. इस अरे में, इस्तेमाल किए जा सकने वाले कन्वर्ज़न डाइनैमिक तौर पर उपलब्ध हैं. कुछ सामान्य इंपोर्ट फ़ॉर्मैट हैं:

शुरू होने का समयइसके लिए
Microsoft Word, OpenDocument Text, एचटीएमएल, आरटीएफ़, सादा टेक्स्टGoogle Docs
Microsoft Excel, OpenDocument स्प्रेडशीट, CSV, TSV, सादा टेक्स्टGoogle Sheets
Microsoft PowerPoint, OpenDocument प्रज़ेंटेशनGoogle Slides
JPEG, PNG, GIF, BMP, PDFGoogle Docs (किसी दस्तावेज़ में इमेज एम्बेड करता है)
सामान्य टेक्स्ट (खास MIME टाइप), JSONGoogle Apps Script

जब update अनुरोध के दौरान मीडिया को अपलोड किया जाता है और Docs, Sheets या Slides की फ़ाइलें, दस्तावेज़ की पूरी सामग्री बदल दी जाती है.

जब किसी इमेज को Docs में बदला जाता है, तो Drive, इमेज को टेक्स्ट में बदलने के लिए, ऑप्टिकल कैरेक्टर रिकग्निशन (ओसीआर) की सुविधा. आप लागू होने वाले BCP के बारे में जानकारी देकर, ओसीआर एल्गोरिदम की क्वालिटी को बेहतर बना सकते हैं 47 भाषा कोड में ocrLanguage पैरामीटर. निकाला गया टेक्स्ट दस्तावेज़ में एम्बेड की गई इमेज के साथ दिखता है.

फ़ाइलें अपलोड करने के लिए, पहले से जनरेट किए गए आईडी का इस्तेमाल करना

Drive API का इस्तेमाल करके, पहले से जनरेट किए गए उन फ़ाइल आईडी की सूची को वापस पाया जा सकता है जिन्हें का इस्तेमाल, संसाधनों को अपलोड करने और बनाने के लिए किया जाता है. अपलोड करने और फ़ाइल बनाने के अनुरोध ये कर सकते हैं पहले से जनरेट किए गए इन आईडी का इस्तेमाल करना चाहिए. फ़ाइल के मेटाडेटा में id फ़ील्ड को सेट करें.

पहले से जनरेट किए गए आईडी बनाने के लिए, कॉल करें files.generateIds बनाने के लिए आईडी की संख्या.

पहले से जनरेट किए गए आईडी का इस्तेमाल करके, फिर से अपलोड करने की कोशिश की जा सकती है. हालांकि, ऐसा तब ही किया जा सकता है, जब कोई तय लक्ष्य न हो सर्वर गड़बड़ी या टाइम आउट हो गया. अगर फ़ाइल बन जाती है, तो इसके बाद retry, HTTP 409 गड़बड़ी दिखाता है और इससे डुप्लीकेट फ़ाइलें नहीं बनती.

अनजान फ़ाइल टाइप के लिए, इंडेक्स किया जा सकने वाला टेक्स्ट तय करें

उपयोगकर्ता, दस्तावेज़ का कॉन्टेंट ढूंढने के लिए, Drive के यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल कर सकते हैं. आप यह भी कर सकते हैं files.list और fullText का इस्तेमाल करें आपके ऐप्लिकेशन से कॉन्टेंट खोजने के लिए फ़ील्ड. ज़्यादा जानकारी के लिए, यह खोजें फ़ाइलें और फ़ोल्डर.

Drive, दस्तावेज़ों को खोज के लिए अपने-आप इंडेक्स करता है. ऐसा तब होता है, जब उसे फ़ाइल टाइप की पहचान करता है. इसमें टेक्स्ट दस्तावेज़, PDF, टेक्स्ट वाली इमेज, और अन्य सामान्य प्रकार. अगर आपका ऐप्लिकेशन दूसरी तरह की फ़ाइलें (जैसे कि ड्रॉइंग, वीडियो, और शॉर्टकट) से जुड़ा है, तो आप फ़ाइल के contentHints.indexableText फ़ील्ड में मौजूद टेक्स्ट को इंडेक्स किया जा सकता है.

इंडेक्स किए जा सकने वाले टेक्स्ट के बारे में ज़्यादा जानकारी के लिए, फ़ाइल मैनेज करें मेटाडेटा.