הורד קבצים עם Cloud Storage ב-Flutter

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

צור הפניה

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

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

// Create a storage reference from our app
final storageRef = FirebaseStorage.instance.ref();

// Create a reference with an initial file path and name
final pathReference = storageRef.child("images/stars.jpg");

// Create a reference to a file from a Google Cloud Storage URI
final gsReference =
    FirebaseStorage.instance.refFromURL("gs://YOUR_BUCKET/images/stars.jpg");

// Create a reference from an HTTPS URL
// Note that in the URL, characters are URL escaped!
final httpsReference = FirebaseStorage.instance.refFromURL(
    "https://firebasestorage.googleapis.com/b/YOUR_BUCKET/o/images%20stars.jpg");

להוריד קבצים

ברגע שיש לך הפניה, תוכל להוריד קבצים מ-Cloud Storage על ידי קריאה ל- getData() או getStream() . אם אתה מעדיף להוריד את הקובץ עם ספרייה אחרת, אתה יכול לקבל כתובת URL להורדה עם getDownloadUrl() .

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

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

final islandRef = storageRef.child("images/island.jpg");

try {
  const oneMegabyte = 1024 * 1024;
  final Uint8List? data = await islandRef.getData(oneMegabyte);
  // Data for "images/island.jpg" is returned, use this as needed.
} on FirebaseException catch (e) {
  // Handle any errors.
}

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

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

final islandRef = storageRef.child("images/island.jpg");

final appDocDir = await getApplicationDocumentsDirectory();
final filePath = "${appDocDir.absolute}/images/island.jpg";
final file = File(filePath);

final downloadTask = islandRef.writeToFile(file);
downloadTask.snapshotEvents.listen((taskSnapshot) {
  switch (taskSnapshot.state) {
    case TaskState.running:
      // TODO: Handle this case.
      break;
    case TaskState.paused:
      // TODO: Handle this case.
      break;
    case TaskState.success:
      // TODO: Handle this case.
      break;
    case TaskState.canceled:
      // TODO: Handle this case.
      break;
    case TaskState.error:
      // TODO: Handle this case.
      break;
  }
});

הורד נתונים דרך URL

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

final imageUrl =
    await storageRef.child("users/me/profile.png").getDownloadURL();

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

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

דוגמה מלאה

דוגמה מלאה של הורדה עם טיפול בשגיאות מוצגת להלן:

final islandRef = storageRef.child("images/island.jpg");

final appDocDir = await getApplicationDocumentsDirectory();
final filePath = "${appDocDir.absolute}/images/island.jpg";
final file = File(filePath);

final downloadTask = islandRef.writeToFile(file);
downloadTask.snapshotEvents.listen((taskSnapshot) {
  switch (taskSnapshot.state) {
    case TaskState.running:
      // TODO: Handle this case.
      break;
    case TaskState.paused:
      // TODO: Handle this case.
      break;
    case TaskState.success:
      // TODO: Handle this case.
      break;
    case TaskState.canceled:
      // TODO: Handle this case.
      break;
    case TaskState.error:
      // TODO: Handle this case.
      break;
  }
});

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