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

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

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

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

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

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

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

פרטי ההטמעה

המחלקות העיקריות הן MediaHttpUploader ו-MediaHttpProgressListener.

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

לדוגמה, השיטה 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);