ফাইল ডেটা আপলোড করুন

আপনি যখন একটি File তৈরি বা আপডেট করেন তখন Google Drive API আপনাকে ফাইল ডেটা আপলোড করতে দেয়৷ কিভাবে একটি মেটাডেটা-শুধু ফাইল তৈরি করতে হয় সে সম্পর্কে তথ্যের জন্য, যেমন একটি ফোল্ডার, দেখুন মেটাডেটা-শুধুমাত্র ফাইল তৈরি করুন

আপনি সঞ্চালিত করতে পারেন তিন ধরনের আপলোড আছে:

  • সহজ আপলোড ( uploadType=media ) : মেটাডেটা সরবরাহ না করে একটি ছোট মিডিয়া ফাইল (5 এমবি বা তার কম) স্থানান্তর করতে এই আপলোডের ধরনটি ব্যবহার করুন। একটি সাধারণ আপলোড সম্পাদন করতে, একটি সাধারণ আপলোড সম্পাদন করুন দেখুন।

  • মাল্টিপার্ট আপলোড ( uploadType=multipart ) : "একটি অনুরোধে ফাইলটির বর্ণনা করে এমন মেটাডেটা সহ একটি ছোট ফাইল (5 MB বা তার কম) স্থানান্তর করতে এই আপলোডের ধরনটি ব্যবহার করুন৷ একটি মাল্টিপার্ট আপলোড করতে, একটি মাল্টিপার্ট আপলোড সম্পাদন করুন দেখুন৷

  • পুনঃসূচনাযোগ্য আপলোড ( uploadType=resumable ) : বড় ফাইলের জন্য এই আপলোডের ধরনটি ব্যবহার করুন (5 MB-এর বেশি) এবং যখন নেটওয়ার্ক বাধার উচ্চ সম্ভাবনা থাকে, যেমন একটি মোবাইল অ্যাপ থেকে একটি ফাইল তৈরি করার সময়৷ রিজুমেবল আপলোডগুলি বেশিরভাগ অ্যাপ্লিকেশনের জন্য একটি ভাল পছন্দ কারণ তারা প্রতি আপলোডের জন্য একটি অতিরিক্ত HTTP অনুরোধের ন্যূনতম খরচে ছোট ফাইলগুলির জন্যও কাজ করে৷ একটি পুনঃসূচনাযোগ্য আপলোড সম্পাদন করতে, পুনরায় শুরুযোগ্য আপলোড সম্পাদন করুন দেখুন।

Google API ক্লায়েন্ট লাইব্রেরিগুলি এই ধরনের আপলোডগুলির মধ্যে অন্তত একটি প্রয়োগ করে৷ ক্লায়েন্ট লাইব্রেরি ডকুমেন্টেশন পড়ুন কিভাবে প্রতিটি প্রকারের ব্যবহার সম্পর্কে অতিরিক্ত বিবরণের জন্য।

PATCH বনাম PUT ব্যবহার করুন

রিফ্রেশার হিসাবে, HTTP ক্রিয়া PATCH একটি আংশিক ফাইল রিসোর্স আপডেট সমর্থন করে যেখানে HTTP ক্রিয়া PUT সম্পূর্ণ রিসোর্স প্রতিস্থাপন সমর্থন করে। মনে রাখবেন যে PUT একটি বিদ্যমান সম্পদে একটি নতুন ক্ষেত্র যোগ করার সময় ব্রেকিং পরিবর্তনগুলি প্রবর্তন করতে পারে।

একটি ফাইল রিসোর্স আপলোড করার সময়, নিম্নলিখিত নির্দেশিকাগুলি ব্যবহার করুন:

  • একটি পুনঃসূচনাযোগ্য আপলোডের প্রাথমিক অনুরোধের জন্য বা একটি সাধারণ বা মাল্টিপার্ট আপলোডের একমাত্র অনুরোধের জন্য API রেফারেন্সে নথিভুক্ত HTTP ক্রিয়া ব্যবহার করুন৷
  • অনুরোধ শুরু হয়ে গেলে পুনরায় শুরু করা আপলোডের জন্য পরবর্তী সমস্ত অনুরোধের জন্য PUT ব্যবহার করুন। এই অনুরোধগুলি কন্টেন্ট আপলোড করা হচ্ছে, যে পদ্ধতিই বলা হোক না কেন।

একটি সহজ আপলোড সঞ্চালন

একটি সাধারণ আপলোড করতে, uploadType=media এর সাথে files.create পদ্ধতি ব্যবহার করুন।

একটি সাধারণ আপলোড কিভাবে সঞ্চালন করতে হয় তা নিম্নলিখিত দেখায়:

HTTP

  1. uploadType=media এর ক্যোয়ারী প্যারামিটার সহ পদ্ধতির /upload URI-তে একটি POST অনুরোধ তৈরি করুন:

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

  2. অনুরোধের বডিতে ফাইলের ডেটা যোগ করুন।

  3. এই HTTP শিরোনাম যোগ করুন:

    • Content-Type . আপলোড করা বস্তুর MIME মিডিয়া প্রকারে সেট করুন৷
    • Content-Length । আপনি আপলোড বাইট সংখ্যা সেট করুন. আপনি যদি খণ্ডিত স্থানান্তর এনকোডিং ব্যবহার করেন, তাহলে এই শিরোনামের প্রয়োজন নেই।
  4. অনুরোধ পাঠান। অনুরোধ সফল হলে, সার্ভার ফাইলের মেটাডেটা সহ HTTP 200 OK স্ট্যাটাস কোড ফেরত দেয়। {HTTP}

যখন আপনি একটি সাধারণ আপলোড করেন, তখন মৌলিক মেটাডেটা তৈরি হয় এবং ফাইল থেকে কিছু বৈশিষ্ট্য অনুমান করা হয়, যেমন MIME প্রকার বা modifiedTime । আপনার কাছে ছোট ফাইল আছে এবং ফাইল মেটাডেটা গুরুত্বপূর্ণ নয় এমন ক্ষেত্রে আপনি একটি সাধারণ আপলোড ব্যবহার করতে পারেন।

একটি মাল্টিপার্ট আপলোড সঞ্চালন

একটি মাল্টিপার্ট আপলোড অনুরোধ আপনাকে একই অনুরোধে মেটাডেটা এবং ডেটা আপলোড করতে দেয়। এই বিকল্পটি ব্যবহার করুন যদি আপনার পাঠানো ডেটা আবার আপলোড করার জন্য যথেষ্ট ছোট হয়, যদি সংযোগ ব্যর্থ হয়।

একটি মাল্টিপার্ট আপলোড করতে, uploadType=multipart এর সাথে files.create পদ্ধতি ব্যবহার করুন।

নিম্নলিখিত দেখায় কিভাবে একটি মাল্টিপার্ট আপলোড সম্পাদন করতে হয়:

জাভা

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

পাইথন

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

পিএইচপি

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

}

.নেট

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. uploadType=multipart এর ক্যোয়ারী প্যারামিটার সহ পদ্ধতির /upload URI-তে একটি POST অনুরোধ তৈরি করুন:

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

  2. অনুরোধের বডি তৈরি করুন। মাল্টিপার্ট/সম্পর্কিত কন্টেন্ট টাইপ RFC 2387 অনুযায়ী বডি ফরম্যাট করুন, যাতে দুটি অংশ থাকে:

    • মেটাডেটা। মেটাডেটা অবশ্যই প্রথমে আসবে এবং একটি Content-Type শিরোনাম অবশ্যই application/json; charset=UTF-8 । JSON ফরম্যাটে ফাইলের মেটাডেটা যোগ করুন।
    • মিডিয়া. মিডিয়াকে অবশ্যই দ্বিতীয় স্থানে আসতে হবে এবং যেকোনো MIME ধরনের একটি Content-Type হেডার থাকতে হবে। মিডিয়া অংশে ফাইলের ডেটা যোগ করুন।

    দুটি হাইফেন দ্বারা পূর্বে একটি সীমানা স্ট্রিং দিয়ে প্রতিটি অংশ সনাক্ত করুন। উপরন্তু, চূড়ান্ত সীমানা স্ট্রিং পরে দুটি হাইফেন যোগ করুন.

  3. এই শীর্ষ-স্তরের HTTP শিরোনাম যোগ করুন:

    • 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 ক্ষেত্রে নির্দিষ্ট করা এক্সটেনশনটি রয়েছে।

একটি পুনরায় শুরুযোগ্য আপলোড সঞ্চালন

একটি পুনঃসূচনাযোগ্য আপলোড আপনাকে একটি আপলোড অপারেশন পুনরায় শুরু করতে দেয় যখন যোগাযোগের ব্যর্থতা ডেটা প্রবাহে বাধা দেয়। যেহেতু আপনাকে শুরু থেকে বড় ফাইল আপলোডগুলি পুনরায় চালু করতে হবে না, নেটওয়ার্ক ব্যর্থতা থাকলে পুনরায় শুরু করা আপলোডগুলি আপনার ব্যান্ডউইথের ব্যবহারও কমাতে পারে।

যখন আপনার ফাইলের আকার ব্যাপকভাবে পরিবর্তিত হতে পারে বা যখন অনুরোধের জন্য একটি নির্দিষ্ট সময়সীমা থাকে (যেমন মোবাইল OS ব্যাকগ্রাউন্ডের কাজ এবং কিছু অ্যাপ ইঞ্জিন অনুরোধ) তখন পুনরায় শুরু করা আপলোডগুলি কার্যকর। আপনি যে পরিস্থিতিতে একটি আপলোড অগ্রগতি বার দেখাতে চান তার জন্য আপনি পুনরায় শুরুযোগ্য আপলোডগুলিও ব্যবহার করতে পারেন।

একটি পুনঃসূচনাযোগ্য আপলোড বেশ কয়েকটি উচ্চ-স্তরের পদক্ষেপ নিয়ে গঠিত:

  1. প্রাথমিক অনুরোধ পাঠান এবং পুনরায় শুরু করা সেশন URI পুনরুদ্ধার করুন।
  2. ডেটা আপলোড করুন এবং আপলোডের অবস্থা নিরীক্ষণ করুন।
  3. (ঐচ্ছিক) আপলোড বিরক্ত হলে, আপলোড পুনরায় শুরু করুন.

প্রাথমিক অনুরোধ পাঠান

একটি পুনঃসূচনাযোগ্য আপলোড শুরু করতে, uploadType=resumable এর সাথে files.create পদ্ধতি ব্যবহার করুন।

HTTP

  1. uploadType=resumable এর ক্যোয়ারী প্যারামিটার সহ পদ্ধতির /upload URI-তে একটি POST অনুরোধ তৈরি করুন:

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

    যদি দীক্ষার অনুরোধ সফল হয়, প্রতিক্রিয়াটিতে একটি 200 OK HTTP স্ট্যাটাস কোড অন্তর্ভুক্ত থাকে। এছাড়াও, এটিতে একটি Location শিরোনাম রয়েছে যা পুনরায় শুরুযোগ্য সেশন URI নির্দিষ্ট করে:

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

    পুনঃসূচনাযোগ্য সেশন URI সংরক্ষণ করুন যাতে আপনি ফাইল ডেটা আপলোড করতে পারেন এবং আপলোডের স্থিতি জিজ্ঞাসা করতে পারেন। একটি পুনরায় শুরু করা সেশন URI এক সপ্তাহ পরে মেয়াদ শেষ হয়।

  2. আপনার কাছে ফাইলটির মেটাডেটা থাকলে, JSON ফর্ম্যাটে রিকোয়েস্ট বডিতে মেটাডেটা যোগ করুন। অন্যথায়, অনুরোধের অংশটি খালি রাখুন।

  3. এই HTTP শিরোনাম যোগ করুন:

    • 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 শিরোনাম রয়েছে যা পুনরায় শুরু করা সেশন URI নির্দিষ্ট করে। ফাইল ডেটা আপলোড করতে এবং আপলোডের স্থিতি জিজ্ঞাসা করতে পুনরায় শুরুযোগ্য সেশন ইউআরআই ব্যবহার করুন। একটি পুনরায় শুরু করা সেশন URI এক সপ্তাহ পরে মেয়াদ শেষ হয়।

  5. অনুলিপি এবং পুনরায় শুরু সেশন URL সংরক্ষণ করুন.

  6. কন্টেন্ট আপলোড চালিয়ে যান।

বিষয়বস্তু আপলোড

একটি পুনরায় শুরু করা সেশন সহ একটি ফাইল আপলোড করার দুটি উপায় রয়েছে:

  • একক অনুরোধে বিষয়বস্তু আপলোড করুন : এই পদ্ধতিটি ব্যবহার করুন যখন ফাইলটি একটি অনুরোধে আপলোড করা যায়, যদি কোনো একক অনুরোধের জন্য কোনো নির্দিষ্ট সময়সীমা না থাকে, বা আপনাকে আপলোডের অগ্রগতি নির্দেশক প্রদর্শন করার প্রয়োজন না হয়। এই পদ্ধতিটি সর্বোত্তম কারণ এটির জন্য কম অনুরোধ প্রয়োজন এবং ফলাফলগুলি আরও ভাল পারফরম্যান্সের জন্য।
  • একাধিক খণ্ডে বিষয়বস্তু আপলোড করুন : এই পদ্ধতিটি ব্যবহার করুন যদি আপনাকে কোনো একক অনুরোধে স্থানান্তরিত ডেটার পরিমাণ কমাতে হয়। পৃথক অনুরোধের জন্য একটি নির্দিষ্ট সময়সীমা থাকলে আপনাকে ডেটা স্থানান্তর হ্রাস করতে হতে পারে, যেমনটি অ্যাপ ইঞ্জিন অনুরোধের নির্দিষ্ট শ্রেণীর ক্ষেত্রে হতে পারে। আপলোডের অগ্রগতি দেখানোর জন্য আপনাকে একটি কাস্টমাইজড সূচক প্রদান করতে হলে এই পদ্ধতিটিও কার্যকর।

HTTP - একক অনুরোধ

  1. পুনরায় শুরু করা সেশন URI-তে একটি PUT অনুরোধ তৈরি করুন।
  2. অনুরোধের বডিতে ফাইলের ডেটা যোগ করুন।
  3. একটি বিষয়বস্তু-দৈর্ঘ্য HTTP শিরোনাম যোগ করুন, ফাইলে বাইটের সংখ্যা সেট করুন।
  4. অনুরোধ পাঠান। আপলোডের অনুরোধ বাধাগ্রস্ত হলে, বা আপনি যদি একটি 5xx প্রতিক্রিয়া পান, তবে একটি বাধাপ্রাপ্ত আপলোড পুনরায় শুরু করুন- এ পদ্ধতি অনুসরণ করুন।

HTTP - একাধিক অনুরোধ

  1. পুনরায় শুরু করা সেশন URI-তে একটি PUT অনুরোধ তৈরি করুন।

  2. অনুরোধের বডিতে খণ্ডের ডেটা যোগ করুন। 256 KB (256 x 1024 বাইট) আকারের গুণিতক অংশে খণ্ডগুলি তৈরি করুন, চূড়ান্ত অংশটি ছাড়া যা আপলোড সম্পূর্ণ করে৷ খণ্ডের আকার যতটা সম্ভব বড় রাখুন যাতে আপলোড কার্যকর হয়।

  3. এই HTTP শিরোনাম যোগ করুন:

    • Content-Length । বর্তমান খণ্ডে বাইটের সংখ্যা সেট করুন।
    • Content-Range । আপনি আপলোড করা ফাইলে কোন বাইট দেখাতে সেট করুন। উদাহরণস্বরূপ, Content-Range: bytes 0-524287/2000000 দেখায় যে আপনি একটি 2,000,000 বাইট ফাইলে প্রথম 524,288 বাইট (256 x 1024 x 2) আপলোড করেছেন।
  4. অনুরোধ পাঠান, এবং প্রতিক্রিয়া প্রক্রিয়া. আপলোডের অনুরোধ বাধাগ্রস্ত হলে, বা আপনি যদি একটি 5xx প্রতিক্রিয়া পান, তবে একটি বাধাপ্রাপ্ত আপলোড পুনরায় শুরু করুন- এ পদ্ধতি অনুসরণ করুন।

  5. ফাইলে থাকা প্রতিটি খণ্ডের জন্য ধাপ 1 থেকে 4 পুনরাবৃত্তি করুন। পরবর্তী খণ্ডটি কোথায় শুরু করবেন তা নির্ধারণ করতে প্রতিক্রিয়াতে Range হেডার ব্যবহার করুন। অনুমান করবেন না যে সার্ভার পূর্ববর্তী অনুরোধে পাঠানো সমস্ত বাইট পেয়েছে।

সম্পূর্ণ ফাইল আপলোড সম্পূর্ণ হলে, আপনি রিসোর্সের সাথে যুক্ত যেকোন মেটাডেটা সহ 200 OK বা 201 Created প্রতিক্রিয়া পাবেন।

একটি বাধাপ্রাপ্ত আপলোড পুনরায় শুরু করুন

যদি একটি আপলোড অনুরোধ একটি প্রতিক্রিয়া আগে বন্ধ করা হয়, অথবা আপনি যদি একটি 503 Service Unavailable প্রতিক্রিয়া পান, তাহলে আপনাকে অবশ্যই বাধাপ্রাপ্ত আপলোড পুনরায় শুরু করতে হবে৷

HTTP

  1. আপলোড স্থিতির অনুরোধ করতে, পুনরায় শুরুযোগ্য সেশন URI-তে একটি খালি PUT অনুরোধ তৈরি করুন৷

  2. ফাইলের বর্তমান অবস্থান অজানা তা নির্দেশ করতে একটি Content-Range শিরোনাম যোগ করুন। উদাহরণস্বরূপ, আপনার ফাইলের মোট দৈর্ঘ্য 2,000,000 বাইট হলে Content-Range */2000000 এ সেট করুন। আপনি যদি ফাইলের সম্পূর্ণ আকার না জানেন, তাহলে 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 নির্দেশ করে যে আপনি 2,000,000 এর মাধ্যমে বাইট 44 পাঠান।

মিডিয়া আপলোড ত্রুটিগুলি পরিচালনা করুন৷

আপনি মিডিয়া আপলোড করার সময়, ত্রুটিগুলি পরিচালনা করতে এই সেরা অনুশীলনগুলি অনুসরণ করুন:

  • 5xx ত্রুটির জন্য, সংযোগ বাধার কারণে ব্যর্থ হওয়া আপলোডগুলি পুনরায় শুরু করুন বা পুনরায় চেষ্টা করুন৷ 5xx ত্রুটিগুলি পরিচালনার বিষয়ে আরও তথ্যের জন্য, 500, 502, 503, 504 ত্রুটিগুলি পড়ুন৷
  • 403 rate limit ত্রুটির জন্য, আপলোড পুনরায় চেষ্টা করুন. 403 rate limit ত্রুটিগুলি পরিচালনা সম্পর্কে আরও তথ্যের জন্য, 403 ত্রুটি পড়ুন: rateLimitExceeded
  • পুনরায় শুরু করা আপলোডের সময় যেকোনো 4xx ত্রুটির জন্য ( 403 সহ) আপলোডটি পুনরায় চালু করুন। এই ত্রুটিগুলি নির্দেশ করে যে আপলোড সেশনের মেয়াদ শেষ হয়ে গেছে এবং একটি নতুন সেশন URI অনুরোধ করে পুনরায় চালু করতে হবে। আপলোড সেশনও এক সপ্তাহ নিষ্ক্রিয়তার পরে মেয়াদ শেষ হয়ে যায়।

Google ডক্স প্রকারে আমদানি করুন৷

আপনি যখন ড্রাইভে একটি ফাইল তৈরি করেন, তখন আপনি ফাইলটিকে একটি Google Workspace ফাইলের ধরনে রূপান্তর করতে চাইতে পারেন, যেমন Google ডক্স বা পত্রক। উদাহরণস্বরূপ, হতে পারে আপনি আপনার প্রিয় ওয়ার্ড প্রসেসর থেকে একটি ডকুমেন্টকে এর বৈশিষ্ট্যগুলির সুবিধা নিতে ডক্সে রূপান্তর করতে চান৷

একটি ফাইলকে একটি নির্দিষ্ট Google Workspace ফাইল টাইপে রূপান্তর করতে, ফাইল তৈরি করার সময় Google Workspace mimeType উল্লেখ করুন।

একটি CSV ফাইলকে Google Workspace শীটে কীভাবে রূপান্তর করতে হয় তা নিচে দেখানো হয়েছে:

জাভা

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

পাইথন

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({
      resource: fileMetadata,
      media: media,
      fields: 'id',
    });
    console.log('File Id:', file.data.id);
    return file.data.id;
  } catch (err) {
    // TODO(developer) - Handle error
    throw err;
  }
}

পিএইচপি

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

}

.নেট

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

একটি রূপান্তর উপলব্ধ কিনা তা দেখতে, ফাইল তৈরি করার আগে সম্পদের importFormats অ্যারে about পরীক্ষা করুন। সমর্থিত রূপান্তরগুলি এই অ্যারেতে গতিশীলভাবে উপলব্ধ। কিছু সাধারণ আমদানি বিন্যাস হল:

থেকে প্রতি
Microsoft Word, OpenDocument Text, HTML, RTF, প্লেইন টেক্সট Google ডক্স
Microsoft Excel, OpenDocument Spreadsheet, CSV, TSV, প্লেইন টেক্সট Google পত্রক
মাইক্রোসফ্ট পাওয়ারপয়েন্ট, ওপেন ডকুমেন্ট উপস্থাপনা গুগল স্লাইড
JPEG, PNG, GIF, BMP, PDF Google ডক্স (একটি ডকে ছবি এম্বেড করে)
প্লেইন টেক্সট (বিশেষ MIME প্রকার), JSON Google Apps স্ক্রিপ্ট

আপনি যখন একটি দস্তাবেজ, পত্রক বা স্লাইড ফাইলে একটি update অনুরোধের সময় মিডিয়া আপলোড এবং রূপান্তর করেন, তখন নথির সম্পূর্ণ বিষয়বস্তু প্রতিস্থাপিত হয়৷

আপনি যখন একটি ছবিকে একটি ডক্সে রূপান্তর করেন, তখন ড্রাইভ অপটিক্যাল ক্যারেক্টার রিকগনিশন (OCR) ব্যবহার করে ছবিটিকে টেক্সটে রূপান্তর করে। আপনি ocrLanguage প্যারামিটারে প্রযোজ্য BCP 47 ভাষার কোড উল্লেখ করে OCR অ্যালগরিদমের গুণমান উন্নত করতে পারেন। নিষ্কাশিত পাঠ্যটি এমবেড করা চিত্রের পাশাপাশি ডকে উপস্থিত হয়৷

ফাইল আপলোড করার জন্য একটি পূর্ব-উত্পন্ন আইডি ব্যবহার করুন

ড্রাইভ API আপনাকে পূর্ব-উত্পাদিত ফাইল আইডিগুলির একটি তালিকা পুনরুদ্ধার করতে দেয় যা সংস্থান আপলোড এবং তৈরি করতে ব্যবহৃত হয়৷ আপলোড এবং ফাইল তৈরির অনুরোধ এই পূর্ব-উত্পন্ন আইডি ব্যবহার করতে পারে। ফাইল মেটাডেটা id ক্ষেত্র সেট করুন.

প্রি-জেনারেটেড আইডি তৈরি করতে, তৈরি করা আইডিগুলির সংখ্যা সহ files.generateIds এ কল করুন।

কোনো অনিশ্চিত সার্ভার ত্রুটি বা সময় শেষ হলে আপনি পূর্ব-উত্পন্ন আইডিগুলির সাথে আপলোডগুলি নিরাপদে পুনরায় চেষ্টা করতে পারেন৷ যদি ফাইলটি সফলভাবে তৈরি করা হয়, তাহলে পরবর্তী পুনঃপ্রচারগুলি একটি HTTP 409 ত্রুটি ফেরত দেয় এবং তারা ডুপ্লিকেট ফাইল তৈরি করে না।

অজানা ফাইল প্রকারের জন্য সূচীযোগ্য পাঠ্য সংজ্ঞায়িত করুন

নথির বিষয়বস্তু খুঁজতে ব্যবহারকারীরা ড্রাইভ UI ব্যবহার করতে পারেন। এছাড়াও আপনি আপনার অ্যাপ থেকে বিষয়বস্তু অনুসন্ধান করতে files.list এবং fullText ক্ষেত্র ব্যবহার করতে পারেন। আরও তথ্যের জন্য, ফাইল এবং ফোল্ডারগুলির জন্য অনুসন্ধান দেখুন।

ড্রাইভ টেক্সট ডকুমেন্ট, পিডিএফ, টেক্সট সহ ইমেজ এবং অন্যান্য সাধারণ ধরন সহ ফাইলের ধরন শনাক্ত করলে অনুসন্ধানের জন্য ডকুমেন্টগুলিকে স্বয়ংক্রিয়ভাবে সূচী করে। যদি আপনার অ্যাপটি অন্য ধরনের ফাইল (যেমন অঙ্কন, ভিডিও এবং শর্টকাট) সংরক্ষণ করে, তাহলে আপনি ফাইলের contentHints.indexableText ফিল্ডে ইনডেক্সযোগ্য পাঠ্য সরবরাহ করে আবিষ্কারযোগ্যতা উন্নত করতে পারেন।

ইনডেক্সযোগ্য পাঠ্য সম্পর্কে আরও তথ্যের জন্য, ফাইল মেটাডেটা পরিচালনা দেখুন।