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
หากมีโครงสร้างพื้นฐานการดาวน์โหลดตาม URL อยู่แล้ว หรือต้องการเพียง URL ที่จะแชร์ คุณก็รับ 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 ได้ด้วย