Cloud Storage for Firebase ช่วยให้คุณดาวน์โหลดไฟล์จากที่เก็บข้อมูล Cloud Storage ที่ Firebase จัดหาและจัดการได้อย่างรวดเร็วและง่ายดาย
สร้างการอ้างอิง
หากต้องการดาวน์โหลดไฟล์ ขั้นตอนแรกให้สร้างCloud Storageการอ้างอิง ไปยังไฟล์ที่ต้องการดาวน์โหลด
คุณสร้างการอ้างอิงได้โดยการต่อท้ายเส้นทางย่อยกับรูทของCloud Storage บัคเก็ต หรือจะสร้างการอ้างอิงจาก gs://
หรือ https://
URL ที่มีอยู่ซึ่งอ้างอิงออบเจ็กต์ใน Cloud Storage ก็ได้
// Create a reference with an initial file path and name StorageReference pathReference = storage.GetReference("images/stars.jpg"); // Create a reference from a Google Cloud Storage URI StorageReference gsReference = storage.GetReferenceFromUrl("gs://bucket/images/stars.jpg"); // Create a reference from an HTTPS URL // Note that in the URL, characters are URL escaped! StorageReference httpsReference = storage.GetReferenceFromUrl("https://firebasestorage.googleapis.com/b/bucket/o/images%20stars.jpg");
ดาวน์โหลดไฟล์
เมื่อมีข้อมูลอ้างอิงแล้ว คุณจะดาวน์โหลดไฟล์จาก Cloud Storage ได้ 4 วิธีดังนี้
- ดาวน์โหลดจาก URL
- ดาวน์โหลดเป็นอาร์เรย์ไบต์
- ดาวน์โหลดด้วยสตรีม
- ดาวน์โหลดเป็นไฟล์ในเครื่อง
วิธีที่คุณจะใช้ในการดึงข้อมูลไฟล์จะขึ้นอยู่กับวิธีที่คุณต้องการ ใช้ข้อมูลในเกม
ดาวน์โหลดจาก URL
หากต้องการใช้ URL กับ WWW
หรือ UnityWebRequest
ของ Unity คุณสามารถ
รับ URL การดาวน์โหลดไฟล์ได้โดยการเรียก GetDownloadUrlAsync()
// Fetch the download URL reference.GetDownloadUrlAsync().ContinueWithOnMainThread(task => { if (!task.IsFaulted && !task.IsCanceled) { Debug.Log("Download URL: " + task.Result); // ... now download the file via WWW or UnityWebRequest. } });
ดาวน์โหลดเป็นอาร์เรย์ไบต์
คุณสามารถดาวน์โหลดไฟล์ไปยังบัฟเฟอร์ไบต์ในหน่วยความจำได้โดยใช้เมธอด GetBytesAsync()
วิธีนี้จะโหลดเนื้อหาทั้งหมดของไฟล์ลงในหน่วยความจำ
หากคุณขอไฟล์ที่มีขนาดใหญ่กว่าหน่วยความจำที่แอปมีอยู่ แอปจะขัดข้อง
หากต้องการป้องกันปัญหาเกี่ยวกับหน่วยความจำ ให้ตั้งค่าขนาดสูงสุดเป็นค่าที่คุณทราบว่าแอปสามารถจัดการได้ หรือใช้วิธีการดาวน์โหลดอื่น
// Download in memory with a maximum allowed size of 1MB (1 * 1024 * 1024 bytes) const long maxAllowedSize = 1 * 1024 * 1024; reference.GetBytesAsync(maxAllowedSize).ContinueWithOnMainThread(task => { if (task.IsFaulted || task.IsCanceled) { Debug.LogException(task.Exception); // Uh-oh, an error occurred! } else { byte[] fileContents = task.Result; Debug.Log("Finished downloading!"); } });
ดาวน์โหลดผ่านสตรีม
การดาวน์โหลดไฟล์ด้วยสตรีมจะช่วยให้คุณประมวลผลข้อมูลได้เมื่อโหลด
ซึ่งจะช่วยให้คุณมีความยืดหยุ่นสูงสุดเมื่อต้องจัดการกับการดาวน์โหลด เรียกใช้
GetStreamAsync()
และส่งโปรเซสเซอร์สตรีมของคุณเองเป็นอาร์กิวเมนต์แรก
ระบบจะเรียกใช้ตัวแทนนี้ในเธรดเบื้องหลังด้วยสตรีม ซึ่งช่วยให้คุณดำเนินการหรือคำนวณที่ต้องใช้เวลาในการประมวลผลนานได้ เช่น การจัดเก็บเนื้อหาลงในดิสก์
// Download via a Stream reference.GetStreamAsync(stream => { // Do something with the stream here. // // This code runs on a background thread which reduces the impact // to your framerate. // // If you want to do something on the main thread, you can do that in the // progress eventhandler (second argument) or ContinueWith to execute it // at task completion. }, null, CancellationToken.None);
GetStreamAsync()
รับอาร์กิวเมนต์ที่ไม่บังคับหลังจากตัวประมวลผลสตรีม ซึ่ง
ช่วยให้คุณยกเลิกการดำเนินการหรือรับการแจ้งเตือนความคืบหน้าได้
ดาวน์โหลดเป็นไฟล์ในเครื่อง
วิธี GetFileAsync()
จะดาวน์โหลดไฟล์ไปยังอุปกรณ์ในเครื่องโดยตรง ใช้ตัวเลือกนี้หาก
ผู้ใช้ต้องการเข้าถึงไฟล์ขณะออฟไลน์หรือแชร์ไฟล์ใน
แอปอื่น
// Create local filesystem URL string localUrl = "file:///local/images/island.jpg"; // Download to the local filesystem reference.GetFileAsync(localUrl).ContinueWithOnMainThread(task => { if (!task.IsFaulted && !task.IsCanceled) { Debug.Log("File downloaded."); } });
คุณสามารถแนบ Listener ไปกับการดาวน์โหลดเพื่อตรวจสอบความคืบหน้าของการ
ดาวน์โหลดได้ โปรแกรมอ่านหน้าจอจะใช้System.IProgress<T>
อินเทอร์เฟซมาตรฐาน คุณสามารถใช้อินสแตนซ์ของคลาส StorageProgress
เพื่อระบุ Action<T>
ของคุณเองเป็นแฮนเดิลการเรียกกลับสำหรับเครื่องหมายความคืบหน้า
// Create local filesystem URL string localUrl = "file:///local/images/island.jpg"; // Start downloading a file Task task = reference.GetFileAsync(localFile, new StorageProgress<DownloadState>(state => { // called periodically during the download Debug.Log(String.Format( "Progress: {0} of {1} bytes transferred.", state.BytesTransferred, state.TotalByteCount )); }), CancellationToken.None); task.ContinueWithOnMainThread(resultTask => { if (!resultTask.IsFaulted && !resultTask.IsCanceled) { Debug.Log("Download finished."); } });
จัดการข้อผิดพลาด
ข้อผิดพลาดในการดาวน์โหลดอาจเกิดขึ้นได้จากหลายสาเหตุ เช่น ไม่มีไฟล์ หรือผู้ใช้ไม่มีสิทธิ์เข้าถึงไฟล์ที่ต้องการ ดูข้อมูลเพิ่มเติมเกี่ยวกับข้อผิดพลาดได้ในส่วนจัดการข้อผิดพลาด ของเอกสาร
ขั้นตอนถัดไป
นอกจากนี้ คุณยังรับและอัปเดตข้อมูลเมตา สำหรับไฟล์ที่จัดเก็บไว้ใน Cloud Storage ได้ด้วย