Cloud Storage สำหรับ Firebase ช่วยให้คุณดาวน์โหลดไฟล์จากที่เก็บ ข้อมูล Cloud Storage ที่ Firebase จัดเตรียมและจัดการโดย 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
ของ Unity หรือ UnityWebRequest
คุณสามารถรับ 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 ได้ด้วย