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

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

আপনি তিন ধরণের আপলোড করতে পারেন:

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

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

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

গুগল এপিআই ক্লায়েন্ট লাইব্রেরিগুলি এই ধরণের আপলোডগুলির মধ্যে কমপক্ষে একটি বাস্তবায়ন করে। প্রতিটি ধরণের কীভাবে ব্যবহার করবেন সে সম্পর্কে অতিরিক্ত তথ্যের জন্য ক্লায়েন্ট লাইব্রেরি ডকুমেন্টেশন দেখুন।

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 পদ্ধতিটি ব্যবহার করুন।

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

জাভা

ড্রাইভ/স্নিপেটস/ড্রাইভ_ভি৩/এসআরসি/মেইন/জাভা/আপলোডবেসিক.জাভা
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;
    }
  }
}

পাইথন

ড্রাইভ/স্নিপেট/ড্রাইভ-ভি৩/ফাইল_স্নিপেট/আপলোড_বেসিক.পি
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()

নোড.জেএস

ড্রাইভ/স্নিপেট/ড্রাইভ_ভি৩/ফাইল_স্নিপেট/আপলোড_বেসিক.জেএস
import fs from 'node:fs';
import {GoogleAuth} from 'google-auth-library';
import {google} from 'googleapis';

/**
 * Uploads a file to Google Drive.
 * @return {Promise<string|null|undefined>} The ID of the uploaded file.
 */
async function uploadBasic() {
  // Authenticate with Google and get an authorized client.
  // TODO (developer): Use an appropriate auth mechanism for your app.
  const auth = new GoogleAuth({
    scopes: 'https://www.googleapis.com/auth/drive',
  });

  // Create a new Drive API client (v3).
  const service = google.drive({version: 'v3', auth});

  // The request body for the file to be uploaded.
  const requestBody = {
    name: 'photo.jpg',
    fields: 'id',
  };

  // The media content to be uploaded.
  const media = {
    mimeType: 'image/jpeg',
    body: fs.createReadStream('files/photo.jpg'),
  };

  // Upload the file.
  const file = await service.files.create({
    requestBody,
    media,
  });

  // Print the ID of the uploaded file.
  console.log('File Id:', file.data.id);
  return file.data.id;
}

পিএইচপি

ড্রাইভ/স্নিপেট/ড্রাইভ_ভি৩/এসআরসি/ড্রাইভআপলোডবেসিক.পিএইচপি
<?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;
    } 

}

.নেট

ড্রাইভ/স্নিপেট/ড্রাইভ_ভি৩/ড্রাইভভি৩স্নিপেট/আপলোডবেসিক.সিএস
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-Typemultipart/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" এর মতো কিছু নির্দিষ্ট করতে পারেন। get পদ্ধতিতে পরবর্তী কলগুলি name ক্ষেত্রে মূলত নির্দিষ্ট করা এক্সটেনশন ধারণকারী পঠনযোগ্য fileExtension সম্পত্তি ফেরত দেয়।

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

যোগাযোগ ব্যর্থতার কারণে ডেটা প্রবাহে ব্যাঘাত ঘটলে পুনরায় শুরু করা যায় এমন আপলোড আপনাকে আপলোড অপারেশন পুনরায় শুরু করতে দেয়। যেহেতু আপনাকে শুরু থেকেই বড় ফাইল আপলোড পুনরায় শুরু করতে হবে না, তাই নেটওয়ার্ক ব্যর্থতার ক্ষেত্রে পুনরায় শুরু করা যায় এমন আপলোডগুলি আপনার ব্যান্ডউইথের ব্যবহারও কমাতে পারে।

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

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

  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 ব্যবহার করুন। একটি পুনঃসূচনাযোগ্য সেশন URI এক সপ্তাহ পরে মেয়াদ শেষ হয়ে যায়।

  5. পুনঃসূচনাযোগ্য সেশন URL টি কপি করে সংরক্ষণ করুন।

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

কন্টেন্ট আপলোড করুন

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

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

HTTP - একক অনুরোধ

  1. পুনঃসূচনাযোগ্য সেশন URI-তে একটি PUT অনুরোধ তৈরি করুন।
  2. অনুরোধের বডিতে ফাইলের ডেটা যোগ করুন।
  3. ফাইলের বাইটের সংখ্যার উপর সেট করা একটি Content-Length HTTP হেডার যোগ করুন।
  4. অনুরোধটি পাঠান। যদি আপলোডের অনুরোধটি বাধাগ্রস্ত হয়, অথবা আপনি যদি 5xx প্রতিক্রিয়া পান, তাহলে "একটি বাধাগ্রস্ত আপলোড পুনরায় শুরু করুন" বিভাগে পদ্ধতিটি অনুসরণ করুন।

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

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

  2. অনুরোধের বডিতে চাঙ্কের ডেটা যোগ করুন। আপলোড সম্পন্নকারী চূড়ান্ত চাঙ্কটি বাদে, ২৫৬ কেবি (২৫৬ x ১০২৪ বাইট) আকারের গুণিতকে চাঙ্ক তৈরি করুন। চাঙ্কের আকার যতটা সম্ভব বড় রাখুন যাতে আপলোডটি দক্ষ হয়।

  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. ফাইলে থাকা প্রতিটি অংশের জন্য ১ থেকে ৪ ধাপ পুনরাবৃত্তি করুন। পরবর্তী অংশটি কোথা থেকে শুরু করবেন তা নির্ধারণ করতে প্রতিক্রিয়ায় 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 নির্দেশ করে যে আপনি 44 থেকে 2,000,000 পর্যন্ত বাইট পাঠাচ্ছেন।

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

মিডিয়া আপলোড করার সময়, ত্রুটিগুলি মোকাবেলা করার জন্য এই সেরা পদ্ধতিগুলি অনুসরণ করুন:

  • 5xx ত্রুটির ক্ষেত্রে, সংযোগ বিঘ্নের কারণে ব্যর্থ হওয়া আপলোডগুলি পুনরায় শুরু করুন বা পুনরায় চেষ্টা করুন। 5xx ত্রুটি পরিচালনা করার বিষয়ে আরও তথ্যের জন্য, ৫০০, ৫০২, ৫০৩, ৫০৪ ত্রুটি দেখুন।
  • 403 rate limit ত্রুটির জন্য, আবার আপলোড করার চেষ্টা করুন। 403 rate limit ত্রুটি পরিচালনা সম্পর্কে আরও তথ্যের জন্য, ৪০৩ ত্রুটি দেখুন: rateLimitExceeded
  • পুনঃসূচনাযোগ্য আপলোডের সময় যেকোনো 4xx ত্রুটি ( 403 সহ) হলে, আপলোডটি পুনরায় চালু করুন। এই ত্রুটিগুলি নির্দেশ করে যে আপলোড সেশনের মেয়াদ শেষ হয়ে গেছে এবং একটি নতুন সেশন URI অনুরোধ করে পুনরায় চালু করতে হবে। এক সপ্তাহ নিষ্ক্রিয়তার পরে আপলোড সেশনের মেয়াদও শেষ হয়ে যায়।

Google ডক্স প্রকারগুলিতে আমদানি করুন

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

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

একটি CSV ফাইলকে Google Workspace শিটে রূপান্তর করার পদ্ধতি নিচে দেখানো হল:

জাভা

ড্রাইভ/স্নিপেট/ড্রাইভ_ভি৩/এসআরসি/মেইন/জাভা/আপলোডউইথকনভারশন.জাভা
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;
    }
  }
}

পাইথন

ড্রাইভ/স্নিপেট/ড্রাইভ-ভি৩/ফাইল_স্নিপেট/আপলোড_উইথ_কনভারশন.পিআই
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()

নোড.জেএস

ড্রাইভ/স্নিপেট/ড্রাইভ_ভি৩/ফাইল_স্নিপেট/আপলোড_উইথ_কনভারশন.জেএস
import fs from 'node:fs';
import {GoogleAuth} from 'google-auth-library';
import {google} from 'googleapis';

/**
 * Uploads a file to Google Drive and converts it to a Google Sheet.
 * @return {Promise<string|null|undefined>} The ID of the uploaded file.
 */
async function uploadWithConversion() {
  // Authenticate with Google and get an authorized client.
  // TODO (developer): Use an appropriate auth mechanism for your app.
  const auth = new GoogleAuth({
    scopes: 'https://www.googleapis.com/auth/drive',
  });

  // Create a new Drive API client (v3).
  const service = google.drive({version: 'v3', auth});

  // The metadata for the file to be uploaded and converted.
  const fileMetadata = {
    name: 'My Report',
    // The MIME type to convert the file to.
    mimeType: 'application/vnd.google-apps.spreadsheet',
  };

  // The media content to be uploaded.
  const media = {
    mimeType: 'text/csv',
    body: fs.createReadStream('files/report.csv'),
  };

  // Upload the file with conversion.
  const file = await service.files.create({
    requestBody: fileMetadata,
    media,
    fields: 'id',
  });

  // Print the ID of the uploaded file.
  console.log('File Id:', file.data.id);
  return file.data.id;
}

পিএইচপি

ড্রাইভ/স্নিপেট/ড্রাইভ_ভি৩/এসআরসি/ড্রাইভআপলোডউইথকনভার্সন.পিএইচপি
<?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;
    }

}

.নেট

ড্রাইভ/স্নিপেট/ড্রাইভ_ভি৩/ড্রাইভভি৩স্নিপেট/আপলোডউইথকনভারশন.সিএস
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 ক্ষেত্রটি পরীক্ষা করুন। এই অ্যারেতে সমর্থিত রূপান্তরগুলি গতিশীলভাবে উপলব্ধ। কিছু সাধারণ আমদানি ফর্ম্যাট হল:

থেকে থেকে
মাইক্রোসফট ওয়ার্ড, ওপেনডকুমেন্ট টেক্সট, এইচটিএমএল, আরটিএফ, প্লেইন টেক্সট গুগল ডক্স
মাইক্রোসফট এক্সেল, ওপেনডকুমেন্ট স্প্রেডশিট, সিএসভি, টিএসভি, প্লেইন টেক্সট গুগল শিটস
মাইক্রোসফট পাওয়ারপয়েন্ট, ওপেনডকুমেন্ট প্রেজেন্টেশন গুগল স্লাইডস
জেপিইজি, পিএনজি, জিআইএফ, বিএমপি, পিডিএফ গুগল ডক্স (ছবিটি একটি ডকে এম্বেড করে)
প্লেইন টেক্সট (বিশেষ MIME টাইপ), JSON গুগল অ্যাপস স্ক্রিপ্ট

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

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

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

ড্রাইভ API আপনাকে পূর্বে তৈরি করা ফাইল আইডিগুলির একটি তালিকা পুনরুদ্ধার করতে দেয় যা রিসোর্স তৈরি, অনুলিপি এবং আপলোড করতে ব্যবহার করা যেতে পারে। আরও তথ্যের জন্য, আপনার ফাইলগুলির সাথে ব্যবহার করার জন্য আইডি তৈরি করুন দেখুন।

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

মনে রাখবেন যে application/vnd.google-apps.drive-sdk এবং application/vnd.google-apps.folder MIME প্রকার ছাড়া Google Workspace ফাইল তৈরির জন্য আগে থেকে তৈরি আইডি সমর্থিত নয়। একইভাবে, Google Workspace ফাইল ফর্ম্যাটে রূপান্তর উল্লেখ করে আপলোডগুলি সমর্থিত নয়।

অজানা ফাইল প্রকারের জন্য সূচীযোগ্য পাঠ্য নির্ধারণ করুন

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

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

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