मीडिया फ़ाइल अपलोड करें

कई एपीआई के तरीके, सामान्य बॉडी के अलावा मीडिया अपलोड करने की सुविधा भी देते हैं. इस स्थिति में, नियमित अनुरोध वाला अन्य तरीका ओवरलोड हो जाता है. अपलोड करने के लिए Stream.

खास जानकारी

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

ResumableMediaUpload

फिर से शुरू किए जाने लायक मीडिया अपलोड की सुविधा, Google API .NET क्लाइंट लाइब्रेरी में एक सुविधा है 1.2.0-बीटा के बाद से. Google API की खास लाइब्रेरी में इस सुविधा का इस्तेमाल करते समय किन बातों का ध्यान रखना चाहिए.

फिर से शुरू किए जा सकने वाले मीडिया अपलोड प्रोटोकॉल के बारे में बताया गया है. उदाहरण के लिए, Drive API के लिए मीडिया अपलोड पेज. यह है दिलचस्पी दिखाने वाले मुख्य लोग ResumableUpload. इस प्रोसेस में, मीडिया कॉन्टेंट को अलग-अलग हिस्सों में अपलोड किया जाता है.

डेटा का डिफ़ॉल्ट साइज़ 10 एमबी है, लेकिन इसे बदला जा सकता है अनुरोध में ChunkSize प्रॉपर्टी को 256 केबी के किसी भी मल्टीपल पर सेट करना. अगर अनुरोध में सर्वर की गड़बड़ी होती है, तो एक्स्पोनेंशियल बैकऑफ़ नीति का इस्तेमाल उन बाइट को फिर से भेजने के लिए किया जाता है जो अपलोड नहीं हो पाईं. डिफ़ॉल्ट रूप से, हर क्लाइंट अनुरोध के लिए एक्स्पोनेंशियल बैकऑफ़ चालू होता है. बनाते समय, डिफ़ॉल्ट ऐक्शन को बदला जा सकता है इसे बदलकर एक नया सेवा ऑब्जेक्ट BaseClientService.Initializer पर DefaultExponentialBackOffPolicy प्रॉपर्टी और/या HttpClientInitializer प्रॉपर्टी का इस्तेमाल करके IConfigurableHttpClientInitializer को बैकऑफ़ नीति जोड़ी गई है.

मीडिया अपलोड करने के तरीकों की पहचान की जा सकती है के लिए संदर्भ दस्तावेज़ में देखें. इन एपीआई के तरीकों के लिए, सुविधा Upload और UploadAsync तरीके जोड़े गए हैं. इन तरीकों में, अपलोड करने के लिए Stream और उसके कॉन्टेंट टाइप को पैरामीटर के तौर पर लिया जाता है.

पक्का करें कि अपलोड की जा रही स्ट्रीम की पोज़िशन शून्य हो. ऐसा न होने पर, आपको गड़बड़ी का मैसेज मिलेगा, जैसे "System.System.Operationअपवाद:: यह हेडर नहीं मिला".

ध्यान दें कि फ़्रेमवर्क के 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");