মিডিয়া আপলোড করুন

বেশ কিছু API পদ্ধতি নিয়মিত বডি ছাড়াও আপলোড মিডিয়া সমর্থন করে। সেক্ষেত্রে, আপলোড করার জন্য একটি অতিরিক্ত Stream পেতে নিয়মিত অনুরোধের পদ্ধতিটি ওভারলোড করা হয়।

ওভারভিউ

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

ResumableMediaUpload

1.2.0-বিটা থেকে Google API .NET ক্লায়েন্ট লাইব্রেরিতে পুনঃসূচনাযোগ্য মিডিয়া আপলোড একটি বৈশিষ্ট্য। Google API-নির্দিষ্ট লাইব্রেরিতে এই বৈশিষ্ট্যটির সাথে ইন্টারঅ্যাক্ট করার সুবিধার পদ্ধতি রয়েছে।

পুনঃসূচনাযোগ্য মিডিয়া আপলোড প্রোটোকল বর্ণনা করা হয়েছে, উদাহরণস্বরূপ, ড্রাইভ API-এর জন্য মিডিয়া আপলোড পৃষ্ঠায় । আগ্রহের প্রধান শ্রেণী হল ResumableUpload . এই বাস্তবায়নে, মিডিয়া বিষয়বস্তু খণ্ডে আপলোড করা হয়।

ডিফল্ট খণ্ডের আকার হল 10MB, তবে আপনি অনুরোধে ChunkSize বৈশিষ্ট্যটি 256KB-এর যেকোনো একাধিকতে সেট করে এটি পরিবর্তন করতে পারেন। যদি একটি অনুরোধে সার্ভার ত্রুটির সম্মুখীন হয় তাহলে সূচকীয় ব্যাকঅফ নীতি সফলভাবে আপলোড করা হয়নি এমন বাইটগুলি পুনরায় পাঠাতে ব্যবহৃত হয়৷ ডিফল্টরূপে, প্রতিটি ক্লায়েন্ট অনুরোধের জন্য সূচকীয় ব্যাকঅফ সক্ষম করা হয়। BaseClientService.InitializerDefaultExponentialBackOffPolicy প্রপার্টি পরিবর্তন করে এবং/অথবা IConfigurableHttpClientInitializer এর নিজস্ব বাস্তবায়নে HttpClientInitializer প্রপার্টি সেট করে আপনি একটি নতুন পরিষেবা অবজেক্ট তৈরি করার সময় আপনি ডিফল্ট আচরণ পরিবর্তন করতে পারেন যা কিছু ব্যাকঅফ নীতি যোগ করে।

যে পদ্ধতিগুলি মিডিয়া আপলোড সমর্থন করে তা API-নির্দিষ্ট ডকুমেন্টেশনের জন্য রেফারেন্স ডকুমেন্টেশনে চিহ্নিত করা হয়। এই API পদ্ধতিগুলির জন্য, সুবিধার Upload এবং UploadAsync পদ্ধতি যোগ করা হয়। এই পদ্ধতিগুলি আপলোড করার জন্য একটি Stream এবং এর বিষয়বস্তুর প্রকারকে পরামিতি হিসাবে গ্রহণ করে।

নিশ্চিত করুন যে আপনি যে স্ট্রিমটি আপলোড করছেন তার অবস্থানটি 0, অন্যথায় আপনি একটি ত্রুটি পাবেন, যেমন "System.InvalidOperationException: প্রদত্ত শিরোনাম পাওয়া যায়নি"।

মনে রাখবেন যে ফ্রেমওয়ার্কের HttpClient ক্লাসের আচরণের কারণে, আপলোডের সময় শেষ হলে, একটি TaskCanceledException নিক্ষেপ করা হয়। আপনি যদি এই ব্যতিক্রমটি দেখতে পান, আপনার পরিষেবা অবজেক্ট দ্বারা ব্যবহৃত ক্লায়েন্টে ম্যানুয়ালি Timeout প্রপার্টি বাড়ানোর কথা বিবেচনা করুন।

নমুনা কোড

// Create the service using the client credentials.
var service = new DriveService(new BaseClientService.Initializer()
{
    HttpClientInitializer = credential,
    ApplicationName = "Application_Name"
});

using var uploadStream = System.IO.File.OpenRead("Local_File_Name");

// Create the File resource to upload.
Google.Apis.Drive.v3.Data.File driveFile = new Google.Apis.Drive.v3.Data.File
{
    Name = "Drive_File_Name"
};
// Get the media upload request object.
FilesResource.CreateMediaUpload insertRequest = service.Files.Create(
    driveFile, uploadStream, "image/jpeg");

// Add handlers which will be notified on progress changes and upload completion.
// Notification of progress changed will be invoked when the upload was started,
// on each upload chunk, and on success or failure.
insertRequest.ProgressChanged += Upload_ProgressChanged;
insertRequest.ResponseReceived += Upload_ResponseReceived;

await insertRequest.UploadAsync();

static void Upload_ProgressChanged(IUploadProgress progress) =>
    Console.WriteLine(progress.Status + " " + progress.BytesSent);

static void Upload_ResponseReceived(Google.Apis.Drive.v3.Data.File file) =>
    Console.WriteLine(file.Name + " was uploaded successfully");