सीधे तौर पर और फिर से शुरू किए जा सकने वाले मीडिया अपलोड

इस दस्तावेज़ में, Java के लिए Google API क्लाइंट लाइब्रेरी की मदद से, सीधे तौर पर और फिर से शुरू किए जा सकने वाले मीडिया अपलोड इस्तेमाल करने का तरीका बताया गया है.

मीडिया अपलोड फिर से शुरू किया जा सकता है

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

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

प्रोटोकॉल का डिज़ाइन

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

क्रियान्वयन विवरण

इस तरह के कॉन्टेंट की मुख्य कैटगरी MediaHttpUploader और MediaHttpProgressListener होती है.

अगर किसी खास सेवा के लिए जनरेट की गई लाइब्रेरी के तरीकों में डिस्कवरी दस्तावेज़ में mediaUpload पैरामीटर होता है, तो इन तरीकों के लिए एक आसान तरीका बनाया जाता है. यह तरीका पैरामीटर के तौर पर InputStreamContent लेता है. (Google API डिस्कवरी सर्विस की मदद से मीडिया अपलोड करने के बारे में ज़्यादा जानने के लिए, मीडिया अपलोड देखें.)

उदाहरण के लिए, Drive API का insert तरीका, mediaUpload पर काम करता है. फ़ाइल अपलोड करने के लिए, इस कोड का इस्तेमाल किया जा सकता है:

class CustomProgressListener implements MediaHttpUploaderProgressListener {
  public void progressChanged(MediaHttpUploader uploader) throws IOException {
    switch (uploader.getUploadState()) {
      case INITIATION_STARTED:
        System.out.println("Initiation has started!");
        break;
      case INITIATION_COMPLETE:
        System.out.println("Initiation is complete!");
        break;
      case MEDIA_IN_PROGRESS:
        System.out.println(uploader.getProgress());
        break;
      case MEDIA_COMPLETE:
        System.out.println("Upload is complete!");
    }
  }
}

File mediaFile = new File("/tmp/driveFile.jpg");
InputStreamContent mediaContent =
    new InputStreamContent("image/jpeg",
        new BufferedInputStream(new FileInputStream(mediaFile)));
mediaContent.setLength(mediaFile.length());

Drive.Files.Insert request = drive.files().insert(fileMetadata, mediaContent);
request.getMediaHttpUploader().setProgressListener(new CustomProgressListener());
request.execute();

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

File mediaFile = new File("/tmp/Test.jpg");
InputStreamContent mediaContent =
    new InputStreamContent("image/jpeg",
        new BufferedInputStream(new FileInputStream(mediaFile)));
mediaContent.setLength(mediaFile.length());

MediaHttpUploader uploader = new MediaHttpUploader(mediaContent, transport, httpRequestInitializer); uploader.setProgressListener(new CustomProgressListener()); HttpResponse response = uploader.upload(requestUrl); if (!response.isSuccessStatusCode()) { throw GoogleJsonResponseException(jsonFactory, response); }

डायरेक्ट मीडिया अपलोड

फिर से शुरू किए जा सकने वाले मीडिया अपलोड करने की सुविधा डिफ़ॉल्ट रूप से चालू होती है. हालांकि, इसे बंद करके सीधे मीडिया अपलोड का इस्तेमाल किया जा सकता है. उदाहरण के लिए, छोटी फ़ाइल अपलोड करने पर. डायरेक्ट मीडिया अपलोड की शुरुआत, Java के लिए Google API क्लाइंट लाइब्रेरी के 1.9.0-beta वर्शन में की गई थी.

डायरेक्ट मीडिया अपलोड, पूरी फ़ाइल को एक एचटीटीपी अनुरोध में अपलोड करता है. यह फिर से शुरू होने वाले मीडिया अपलोड प्रोटोकॉल से अलग होता है. इस प्रोटोकॉल में फ़ाइल को कई अनुरोधों में अपलोड किया जाता है. सीधे तौर पर अपलोड करने से एचटीटीपी अनुरोधों की संख्या कम हो जाती है. हालांकि, बड़े पैमाने पर अपलोड होने की वजह से कनेक्शन के काम न करने जैसी समस्याओं की संभावना बढ़ जाती है.

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

mediaHttpUploader.setDirectUploadEnabled(true);