Firebase is back at Google I/O on May 10! Register now

อัปโหลดไฟล์ด้วย Cloud Storage สำหรับ Unity

จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ

Cloud Storage สำหรับ Firebase ช่วยให้คุณอัปโหลดไฟล์ไปยังที่ฝากข้อมูล Cloud Storage ที่ Firebase จัดเตรียมและจัดการได้อย่างรวดเร็วและง่ายดาย

สร้างข้อมูลอ้างอิง

หากต้องการอัปโหลดไฟล์ ก่อนอื่น ให้สร้างการอ้างอิง Cloud Storage ไปยังไฟล์ที่คุณต้องการอัปโหลด

คุณสร้างข้อมูลอ้างอิงได้โดยเพิ่มเส้นทางย่อยต่อท้ายรูทของที่เก็บข้อมูล Cloud Storage หรือสร้างข้อมูลอ้างอิงจาก URL gs:// หรือ https:// ที่มีอยู่ซึ่งอ้างอิงวัตถุใน 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 ได้สองวิธี:

  1. อัปโหลดจากอาร์เรย์ไบต์ในหน่วยความจำ
  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(...

ตรวจสอบความคืบหน้าการอัปโหลด

คุณสามารถแนบฟังกับการอัปโหลดเพื่อติดตามความคืบหน้าของการอัปโหลด ผู้ฟังปฏิบัติตามอินเตอร์เฟส 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 กัน