यूनिटी के लिए क्लाउड स्टोरेज के साथ फ़ाइलें डाउनलोड करें

फायरबेस के लिए क्लाउड स्टोरेज आपको फायरबेस द्वारा प्रदान और प्रबंधित क्लाउड स्टोरेज बकेट से फ़ाइलों को जल्दी और आसानी से डाउनलोड करने की अनुमति देता है।

एक संदर्भ बनाएँ

किसी फ़ाइल को डाउनलोड करने के लिए, पहले उस फ़ाइल का क्लाउड स्टोरेज संदर्भ बनाएं जिसे आप डाउनलोड करना चाहते हैं।

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

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

फ़ाइलें डाउनलोड करें

एक बार आपके पास संदर्भ हो जाने पर, आप क्लाउड स्टोरेज से चार तरीकों से फ़ाइलें डाउनलोड कर सकते हैं:

  1. एक यूआरएल से डाउनलोड करें
  2. बाइट सरणी में डाउनलोड करें
  3. स्ट्रीम के साथ डाउनलोड करें
  4. स्थानीय फ़ाइल में डाउनलोड करें

आप अपनी फ़ाइलों को पुनः प्राप्त करने के लिए जिस विधि का उपयोग करेंगे वह इस बात पर निर्भर करेगा कि आप अपने गेम में डेटा का उपभोग कैसे करना चाहते हैं।

एक यूआरएल से डाउनलोड करें

यदि आप यूनिटी के WWW या UnityWebRequest के साथ एक यूआरएल का उपयोग करना चाहते हैं तो आप 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.");
    }
});

डाउनलोड की प्रगति पर नज़र रखने के लिए आप श्रोताओं को डाउनलोड से जोड़ सकते हैं। श्रोता मानक System.IProgress<T> इंटरफ़ेस का अनुसरण करता है। आप प्रगति टिकों के लिए कॉलबैक के रूप में अपनी स्वयं की Action<T> प्रदान करने के लिए, StorageProgress क्लास के एक उदाहरण का उपयोग कर सकते हैं।

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

त्रुटियाँ संभालें

ऐसे कई कारण हैं जिनकी वजह से डाउनलोड पर त्रुटियां हो सकती हैं, जिनमें फ़ाइल का मौजूदा न होना, या उपयोगकर्ता के पास वांछित फ़ाइल तक पहुंचने की अनुमति न होना शामिल है। त्रुटियों के बारे में अधिक जानकारी डॉक्स के हैंडल एरर्स अनुभाग में पाई जा सकती है।

अगले कदम

आप क्लाउड स्टोरेज में संग्रहीत फ़ाइलों के लिए मेटाडेटा भी प्राप्त और अपडेट कर सकते हैं।