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

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

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

פרטי ההטמעה

המחלקות העיקריות הן MediaHttpDownloader ו-MediaHttpDownloaderProgressListener. ההורדה של תוכן המדיה מתבצעת במקטעים, וגודל המקטע ניתן להגדרה. אם מתקבלת שגיאה בחיבור לשרת בבקשה, מנסים שוב את הבקשה.

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

לדוגמה:

class CustomProgressListener implements MediaHttpDownloaderProgressListener {
  public void progressChanged(MediaHttpDownloader downloader) {
    switch (downloader.getDownloadState()) {
      case MEDIA_IN_PROGRESS:
        System.out.println(downloader.getProgress());
        break;
      case MEDIA_COMPLETE:
        System.out.println("Download is complete!");
    }
  }
}

OutputStream out = new FileOutputStream("/tmp/driveFile.jpg");

DriveFiles.Get request = drive.files().get(fileId);
request.getMediaHttpDownloader().setProgressListener(new CustomProgressListener());
request.executeMediaAndDownloadTo(out);

אפשר להשתמש בתכונה הזו גם בלי ספריות ספציפיות לשירות. לדוגמה:

OutputStream out = new FileOutputStream("/tmp/Test.jpg");

MediaHttpDownloader downloader = new MediaHttpDownloader(transport, httpRequestInitializer);
downloader.setProgressListener(new CustomProgressListener());
downloader.download(requestUrl, out);

הורדה ישירה של מדיה

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

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

השימוש זהה למה שתואר למעלה, בתוספת הקריאה הבאה ל-MediaHttpDownloader לבצע הורדות ישירות:

mediaHttpDownloader.setDirectDownloadEnabled(true);