Cloud Storage for Firebase ช่วยให้คุณดาวน์โหลดได้อย่างรวดเร็วและง่ายดาย ไฟล์จาก Cloud Storage ระบุและจัดการโดย Firebase
สร้างการอ้างอิง
หากต้องการดาวน์โหลดไฟล์ ก่อนอื่นให้ สร้างข้อมูลอ้างอิง Cloud Storage ลงในไฟล์ที่คุณต้องการดาวน์โหลด
คุณสามารถสร้างข้อมูลอ้างอิงได้โดยต่อท้ายเส้นทางย่อยที่ราก
ที่เก็บข้อมูล Cloud Storage หรือสร้างข้อมูลอ้างอิงจากที่เก็บข้อมูลที่มีอยู่
URL gs://
หรือ https://
กำลังอ้างอิงออบเจ็กต์ใน 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>
มาตรฐาน
ของ Google คุณสามารถใช้อินสแตนซ์ของคลาส StorageProgress
เพื่อให้
Action<T>
ของคุณเองเป็น Callback สำหรับแสดงความคืบหน้า
// 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