Cloud Storage के साथ Unity के लिए फ़ाइलें अपलोड करना

Cloud Storage for Firebase की मदद से, Firebase की ओर से उपलब्ध कराई गई और मैनेज की जाने वाली Cloud Storage बकेट में फ़ाइलों को तेज़ी से और आसानी से अपलोड किया जा सकता है.

रेफ़रंस बनाना

किसी फ़ाइल को अपलोड करने के लिए, सबसे पहले उस फ़ाइल का Cloud Storage रेफ़रंस बनाएं जिसे अपलोड करना है.

Cloud Storage बकेट के रूट में चाइल्ड पाथ जोड़कर रेफ़रंस बनाया जा सकता है. इसके अलावा, Cloud Storage में मौजूद किसी ऑब्जेक्ट का रेफ़रंस देने वाले किसी मौजूदा gs:// या https:// यूआरएल से भी रेफ़रंस बनाया जा सकता है.

// 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 बकेट के रूट का रेफ़रंस देकर, डेटा अपलोड नहीं किया जा सकता. आपका रेफ़रंस, चाइल्ड यूआरएल पर ले जाना चाहिए.

फ़ाइलें अपलोड करें

रेफ़रंस मिलने के बाद, Cloud Storage पर फ़ाइलें अपलोड करने के दो तरीके हैं:

  1. मेमोरी में मौजूद बाइट कलेक्शन से अपलोड करना
  2. डिवाइस पर मौजूद किसी फ़ाइल के फ़ाइल पाथ से अपलोड करना

मेमोरी में मौजूद डेटा से अपलोड करना

PutBytesAsync() तरीका, Cloud Storage पर फ़ाइल अपलोड करने का सबसे आसान तरीका है. PutBytesAsync(), byte[] को लेकर 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 जैसी सामान्य फ़ाइल मेटाडेटा प्रॉपर्टी शामिल होती हैं. आम तौर पर, इन्हें एमआईएम टाइप कहा जाता है. 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> इंटरफ़ेस का इस्तेमाल करता है. प्रोग्रेस टिक के लिए कॉलबैक के तौर पर अपना Action<T> उपलब्ध कराने के लिए, StorageProgress क्लास के किसी इंस्टेंस का इस्तेमाल किया जा सकता है.

// 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.");
    }
});

गड़बड़ी ठीक करना

अपलोड करने पर गड़बड़ियां होने की कई वजहें हो सकती हैं. जैसे, लोकल फ़ाइल मौजूद न होना या उपयोगकर्ता के पास अपनी पसंद की फ़ाइल अपलोड करने की अनुमति न होना. गड़बड़ियों के बारे में ज़्यादा जानकारी पाने के लिए, Docs के गड़बड़ियों को मैनेज करें सेक्शन पर जाएं.

अगले चरण

फ़ाइलें अपलोड करने के बाद, Cloud Storage से उन्हें डाउनलोड करने का तरीका जानें.