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

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

הפרוטוקול להורדת מדיה שניתן להמשיך דומה לפרוטוקול של העלאת מדיה שניתן להמשיך שמתואר מאמרי העזרה של 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);