Cloud Storage สำหรับ Firebase ช่วยให้คุณอัปโหลดไฟล์ไปยังที่เก็บข้อมูล Cloud Storage ที่ให้บริการและจัดการโดย Firebase ได้อย่างรวดเร็วและง่ายดาย
สร้างข้อมูลอ้างอิง
หากต้องการอัปโหลดไฟล์ ขั้นแรก ให้สร้างการอ้างอิง Cloud Storage ไปยังไฟล์ที่คุณต้องการอัปโหลด
คุณสามารถสร้างข้อมูลอ้างอิงได้โดยเพิ่มเส้นทางลูกต่อท้ายรากของที่เก็บข้อมูล Cloud Storage ของคุณ หรือคุณสามารถสร้างข้อมูลอ้างอิงจาก gs://
หรือ https://
URL ที่มีอยู่ซึ่งอ้างอิงออบเจ็กต์ใน Cloud Storage ก็ได้
// Create a root reference StorageReference storageRef = storage.RootReference; // Create a reference to "mountains.jpg" StorageReference mountainsRef = storageRef.Child("mountains.jpg"); // Create a reference to 'images/mountains.jpg' StorageReference mountainImagesRef = storageRef.Child("images/mountains.jpg"); // While the file names are the same, the references point to different files Assert.AreEqual(mountainsRef.Name, mountainImagesRef.Name); Assert.AreNotEqual(mountainsRef.Path, mountainImagesRef.Path);
คุณไม่สามารถอัปโหลดข้อมูลโดยอ้างอิงถึงรากของที่เก็บข้อมูล Cloud Storage ของคุณได้ การอ้างอิงของคุณต้องชี้ไปที่ URL ย่อย
อัพโหลดไฟล์
เมื่อคุณมีข้อมูลอ้างอิงแล้ว คุณจะอัปโหลดไฟล์ไปยัง Cloud Storage ได้ 2 วิธี:
- อัปโหลดจากอาร์เรย์ไบต์ในหน่วยความจำ
- อัปโหลดจากเส้นทางไฟล์ที่แสดงไฟล์บนอุปกรณ์
อัพโหลดจากข้อมูลในหน่วยความจำ
เมธอด PutBytesAsync()
เป็นวิธีที่ง่ายที่สุดในการอัปโหลดไฟล์ไปยัง Cloud Storage PutBytesAsync()
รับไบต์[] และส่งคืน System.Task<Firebase.Storage.StorageMetadata>
ซึ่งจะมีข้อมูลเกี่ยวกับไฟล์เมื่องานเสร็จสิ้น คุณสามารถเลือกใช้ IProgress<UploadState>
(โดยทั่วไป StorageProgress<UploadState>
) เพื่อตรวจสอบสถานะการอัปโหลดของคุณ
// Data in memory var customBytes = new byte[] { /*...*/ }; // Create a reference to the file you want to upload StorageReference riversRef = storageRef.Child("images/rivers.jpg"); // Upload the file to the path "images/rivers.jpg" riversRef.PutBytesAsync(customBytes) .ContinueWith((Task<StorageMetadata> task) => { if (task.IsFaulted || task.IsCanceled) { Debug.Log(task.Exception.ToString()); // Uh-oh, an error occurred! } else { // Metadata contains file metadata such as size, content-type, and md5hash. StorageMetadata metadata = task.Result; string md5Hash = metadata.Md5Hash; Debug.Log("Finished uploading..."); Debug.Log("md5 hash = " + md5Hash); } });
อัปโหลดจากไฟล์ในเครื่อง
คุณสามารถอัปโหลดไฟล์ในเครื่องบนอุปกรณ์ เช่น ภาพถ่ายและวิดีโอจากกล้อง ได้ด้วยวิธี PutFileAsync()
PutFileAsync()
รับ string
ที่แสดงถึงเส้นทางไปยังไฟล์และส่งกลับ System.Task<Firebase.Storage.StorageMetadata>
ซึ่งจะมีข้อมูลเกี่ยวกับไฟล์เมื่องานเสร็จสมบูรณ์ คุณสามารถเลือกใช้ IProgress<UploadState>
(โดยทั่วไป StorageProgress<UploadState>
) เพื่อตรวจสอบสถานะการอัปโหลดของคุณ
// File located on disk string localFile = "..."; // Create a reference to the file you want to upload StorageReference riversRef = storageRef.Child("images/rivers.jpg"); // Upload the file to the path "images/rivers.jpg" riversRef.PutFileAsync(localFile) .ContinueWith((Task<StorageMetadata> task) => { if (task.IsFaulted || task.IsCanceled) { Debug.Log(task.Exception.ToString()); // Uh-oh, an error occurred! } else { // Metadata contains file metadata such as size, content-type, and download URL. StorageMetadata metadata = task.Result; string md5Hash = metadata.Md5Hash; Debug.Log("Finished uploading..."); Debug.Log("md5 hash = " + md5Hash); } });
หากคุณต้องการตรวจสอบการอัปโหลดของคุณอย่างจริงจัง คุณสามารถใช้คลาส StorageProgress
หรือคลาสของคุณเองที่ใช้ IProgress<UploadState>
ด้วยเมธอด PutFileAsync()
หรือ PutBytesAsync()
ดู จัดการการอัปโหลด สำหรับข้อมูลเพิ่มเติม
เพิ่มข้อมูลเมตาของไฟล์
คุณยังสามารถรวมข้อมูลเมตาเมื่อคุณอัปโหลดไฟล์ได้อีกด้วย ข้อมูลเมตานี้มีคุณสมบัติข้อมูลเมตาของไฟล์ทั่วไป เช่น Name
Size
และ ContentType
(โดยทั่วไปเรียกว่าประเภท MIME) เมธอด PutFileAsync()
จะอนุมานประเภทเนื้อหาจากนามสกุลไฟล์โดยอัตโนมัติ แต่คุณสามารถแทนที่ประเภทที่ตรวจพบอัตโนมัติได้โดยระบุ ContentType
ในข้อมูลเมตา หากคุณไม่ได้ระบุ ContentType
และ Cloud Storage ไม่สามารถอนุมานค่าเริ่มต้นจากนามสกุลไฟล์ได้ Cloud Storage จะใช้ application/octet-stream
ดูส่วน ใช้ข้อมูลเมตาของไฟล์ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับข้อมูลเมตาของไฟล์
// Create storage reference StorageReference mountainsRef = storageRef.Child("images/mountains.jpg"); byte[] customBytes = new byte[] { /*...*/ }; string localFile = "..."; // Create file metadata including the content type var newMetadata = new MetadataChange(); newMetadata.ContentType = "image/jpeg"; // Upload data and metadata mountainsRef.PutBytesAsync(customBytes, newMetadata, null, CancellationToken.None); // .ContinueWithOnMainThread(... // Upload file and metadata mountainsRef.PutFileAsync(localFile, newMetadata, null, CancellationToken.None); // .ContinueWithOnMainThread(...
ติดตามความคืบหน้าการอัปโหลด
คุณสามารถแนบผู้ฟังในการอัปโหลดเพื่อติดตามความคืบหน้าของการอัปโหลด Listener เป็นไปตามอินเทอร์เฟซ System.IProgress<T>
มาตรฐาน คุณสามารถใช้อินสแตนซ์ของคลาส StorageProgress
เพื่อจัดเตรียม Action<T>
ของคุณเองเป็นการโทรกลับสำหรับเห็บความคืบหน้า
// Start uploading a file var task = storageRef.Child("images/mountains.jpg") .PutFileAsync(localFile, null, new StorageProgress<UploadState>(state => { // called periodically during the upload Debug.Log(String.Format("Progress: {0} of {1} bytes transferred.", state.BytesTransferred, state.TotalByteCount)); }), CancellationToken.None, null); task.ContinueWithOnMainThread(resultTask => { if (!resultTask.IsFaulted && !resultTask.IsCanceled) { Debug.Log("Upload finished."); } });
การจัดการข้อผิดพลาด
มีสาเหตุหลายประการที่ทำให้เกิดข้อผิดพลาดในการอัปโหลด รวมถึงไฟล์ในเครื่องที่ไม่มีอยู่ หรือผู้ใช้ไม่มีสิทธิ์ในการอัปโหลดไฟล์ที่ต้องการ คุณสามารถค้นหาข้อมูลเพิ่มเติมเกี่ยวกับข้อผิดพลาดได้ในส่วน การจัดการข้อผิดพลาด ของเอกสาร
ขั้นตอนถัดไป
เมื่อคุณอัปโหลดไฟล์แล้ว มาดูวิธี ดาวน์โหลดไฟล์ จาก Cloud Storage กันดีกว่า