העלאות מדיה ישירות וניתנות לחידוש

במסמך הזה נסביר איך להשתמש בהעלאות מדיה ישירות שניתן להמשיך עם ספריית הלקוח של Google API ל-Java.

העלאת מדיה שניתן להמשיך

כשמעלים קובץ מדיה גדול לשרת, משתמשים בהעלאת מדיה שניתן להמשיך כדי שולחים את מקטע הקובץ אחרי מקטע. הספריות שנוצרות על ידי Google API מכילות שיטות נוחות לאינטראקציה עם העלאת מדיה שניתן להמשיך.

הפרוטוקול של העלאת מדיה שניתן להמשיך דומה להעלאת מדיה שניתן להמשיך בפרוטוקול המתואר בתיעוד של Google Drive API.

תכנון פרוטוקול

תרשים הרצף הבא מציג איך פועל הפרוטוקול של העלאת מדיה שניתן להמשיך:
תרשים רצף שמראה איך בקשות ותגובות עוברות בין הלקוח לשרת.

פרטי ההטמעה

קטגוריות העניין העיקריות הן MediaHttpUploader ו-MediaHttpProgressListener.

אם methods בספריות הספציפיות לשירות שנוצרות מכילות את הפרמטר mediaUpload במסמך Discovery, תיווצר שיטת נוחות בשביל השיטות האלה, InputStreamContent בתור פרמטר. (למידע נוסף על השימוש בהעלאה של מדיה עם ממשקי ה-API של Google Discovery Service: מידע נוסף העלאת מדיה).

לדוגמה, השיטה insert ב-Drive API תומך ב-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); }

העלאה ישירה של מדיה

העלאת מדיה שניתן להמשיך מופעלת כברירת מחדל, אבל אפשר להשבית אותה ולהשתמש בה העלאה ישירה של מדיה, לדוגמה, אם אתם מעלים קובץ קטן. ישירה העלאת מדיה הושקה בגרסת 1.9.0-beta של ספריית הלקוח של Google API עבור Java.

'העלאה ישירה של מדיה' מעלה את כל הקובץ בבקשת HTTP אחת, בניגוד פרוטוקול העלאת מדיה שניתן להמשיך, שמעלה את הקובץ בבקשות מרובות. העלאה ישירה מפחיתה את מספר בקשות ה-HTTP אבל מגדילה את סיכוי לכשלים (כמו כשלים בחיבור) שיכולים להתרחש במקרה של העלאות.

השימוש בהעלאה ישירה של מדיה זהה לשימוש שתואר למעלה עבור העלאת מדיה שניתן להמשיך, והקריאה הבאה שאומרת ל-MediaHttpUploader כדי לבצע העלאות ישירות בלבד:

mediaHttpUploader.setDirectUploadEnabled(true);