Cloud Storage for Firebase 可讓您從 Firebase 提供及管理的 Cloud Storage 值區,輕鬆快速地下載檔案。
可建立參照
如要下載檔案,請先為要下載的檔案建立 Cloud Storage 參考資料。
您可以將子路徑附加至 Cloud Storage 值區的根目錄,藉此建立參照,也可以從現有的 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");
下載檔案
取得參照後,您可以呼叫 getData()
或 getStream()
,從 Cloud Storage 下載檔案。如果您想使用其他程式庫下載檔案,可以使用 getDownloadUrl()
取得下載網址。
在記憶體中下載
使用 getData()
方法將檔案下載到 UInt8List
。這是下載檔案最簡單的��式,��������將整個檔案內容載入記憶體。如果您要求的檔案大於應用程式可用記憶體,應用程式就會當機。為避免記憶體問題,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;
}
});
透過網址下載資料
如果您已擁有以網址為基礎的下載基礎架構,或是單純想分享網址,則可呼叫 Cloud Storage 參考資料中的 getDownloadURL()
方法,以取得檔案的下載網址。
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 的檔案取得及更新中繼資料。