הורד קבצים עם Cloud Storage עבור C++

Cloud Storage for Firebase מאפשר לך להוריד במהירות ובקלות קבצים מ- Cloud Storage שסופק ומנוהל על ידי Firebase.

צור הפניה

כדי להוריד קובץ, תחילה צור הפניה ל-Cloud Storage לקובץ שברצונך להוריד.

אתה יכול ליצור הפניה על ידי הוספת נתיבים צאצאים לשורש של דלי Cloud Storage שלך, או שאתה יכול ליצור הפניה מכתובת URL קיימת של gs:// או https:// המפנה לאובייקט ב-Cloud Storage.

// Create a reference with an initial file path and name
StorageReference path_reference = storage->GetReference("images/stars.jpg");

// Create a reference from a Cloud Storage URI
StorageReference gs_reference = storage->GetReferenceFromUrl("gs://bucket/images/stars.jpg");

// Create a reference from an HTTPS URL
// Note that in the URL, characters are URL escaped!
StorageReference https_reference = storage->GetReferenceFromUrl("https://firebasestorage.googleapis.com/b/bucket/o/images%20stars.jpg");

להוריד קבצים

ברגע שיש לך הפניה, תוכל להוריד קבצים מ-Cloud Storage בשלוש דרכים:

  1. הורד למאגר בזיכרון
  2. הורד לנתיב מסוים במכשיר
  3. צור כתובת URL של מחרוזת המייצגת את הקובץ באינטרנט

הורדה בזיכרון

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

// Create a reference to the file you want to download
StorageReference island_ref = storage_ref.Child("images/island.jpg");

// Download in memory with a maximum allowed size of 1MB (1 * 1024 * 1024 bytes)
const size_t kMaxAllowedSize = 1 * 1024 * 1024
int8_t byte_buffer[kMaxAllowedSize];
firebase::Future future = island_ref.GetBytes(byte_buffer, kMaxAllowedSize);

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

// In the game loop that polls for the result...

if (future.status() != firebase::kFutureStatusPending) {
  if (future.status() != firebase::kFutureStatusComplete) {
    LogMessage("ERROR: GetBytes() returned an invalid future.");
    // Handle the error...
  } else if (future.Error() != firebase::storage::kErrorNone) {
    LogMessage("ERROR: GetBytes() returned error %d: %s", future.Error(),
               future.error_message());
    // Handle the error...
  } else {
    // byte_buffer is now populated with data for "images/island.jpg"
  }
}

הורד לקובץ מקומי

שיטת GetFile() מורידה קובץ ישירות למכשיר מקומי. השתמש בזה אם המשתמשים שלך רוצים לקבל גישה לקובץ במצב לא מקוון או לשתף באפליקציה אחרת.

// Create a reference to the file you want to download
StorageReference islandRef = storage_ref.Child("images/island.jpg"];

// Create local filesystem URL
const char* local_url = "file:///local/images/island.jpg";

// Download to the local filesystem
Future future = islandRef.GetFile(local_url);

// Wait for Future to complete...

if (future.Error() != firebase::storage::kErrorNone) {
  // Uh-oh, an error occurred!
} else {
  // The file has been downloaded to local file URL "images/island.jpg"
}

GetFile() לוקח ארגומנט Controller אופציונלי שבו אתה יכול להשתמש כדי לנהל את ההורדה שלך. ראה ניהול הורדות למידע נוסף.

צור כתובת אתר להורדה

אם כבר יש לך תשתית הורדה המבוססת על כתובות אתרים, או סתם רוצה שכתובת אתר שתשתף, תוכל לקבל את כתובת האתר להורדה של קובץ על ידי קריאה לשיטת GetDownloadUrl() ב-Cloud Storage.

// Create a reference to the file you want to download
StorageReference stars_ref = storage_ref.Child("images/stars.jpg");

// Fetch the download URL
firebase::Future future = stars_ref.GetDownloadUrl();

// Wait for Future to complete...

if (future.Error() != firebase::storage::kErrorNone) {
  // Uh-oh, an error occurred!
} else {
  // Get the download URL for 'images/stars.jpg'
  std::string download_url = future.Result();
}

נהל הורדות

בנוסף להתחלת הורדות, אתה יכול להשהות, לחדש ולבטל הורדות באמצעות השיטות Pause() , Resume() ו- Cancel() ב- Controller , שאותן תוכל להעביר לשיטות GetBytes() או GetFile() באופן אופציונלי.

// Start downloading a file
Controller controller;
storage_ref.Child("images/mountains.jpg").GetFile(local_file, nullptr, &controller);

// Pause the download
controller.Pause();

// Resume the download
controller.Resume();

// Cancel the download
controller.Cancel();

עקוב אחר התקדמות ההורדה

ניתן לצרף מאזינים להורדות על מנת לעקוב אחר התקדמות ההורדה.

class MyListener : public firebase::storage::Listener {
 public:
  virtual void OnProgress(firebase::storage::Controller* controller) {
    // A progress event occurred
  }
};

{
  // Start uploading a file
  MyEventListener my_listener;
  storage_ref.Child("images/mountains.jpg").GetFile(local_file, my_listener);
}

טיפול בשגיאות

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

הצעדים הבאים

אתה יכול גם לקבל ולעדכן מטא נתונים עבור קבצים המאוחסנים ב-Cloud Storage.