ইউনিটির জন্য ক্লাউড স্টোরেজ দিয়ে ফাইল ডাউনলোড করুন

Cloud Storage for Firebase আপনাকে ফায়ারবেস দ্বারা সরবরাহকৃত ও পরিচালিত Cloud Storage বাকেট থেকে দ্রুত এবং সহজে ফাইল ডাউনলোড করার সুযোগ দেয়।

একটি রেফারেন্স তৈরি করুন

ফাইল ডাউনলোড করতে, প্রথমে আপনি যে ফাইলটি ডাউনলোড করতে চান সেটির জন্য একটি Cloud Storage রেফারেন্স তৈরি করুন

আপনি আপনার Cloud Storage বাকেটের রুটে চাইল্ড পাথ যুক্ত করে একটি রেফারেন্স তৈরি করতে পারেন, অথবা Cloud Storage কোনো অবজেক্টকে রেফারেন্স করে এমন একটি বিদ্যমান gs:// বা https:// URL থেকেও একটি রেফারেন্স তৈরি করতে পারেন।

// 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 থেকে চারটি উপায়ে ফাইল ডাউনলোড করতে পারেন:

  1. একটি URL থেকে ডাউনলোড করুন
  2. বাইট অ্যারেতে ডাউনলোড করুন
  3. স্ট্রিমের মাধ্যমে ডাউনলোড করুন
  4. স্থানীয় ফাইলে ডাউনলোড করুন

আপনার ফাইলগুলো পুনরুদ্ধার করার পদ্ধতি নির্ভর করবে আপনি আপনার গেমে ডেটা কীভাবে ব্যবহার করতে চান তার ওপর।

একটি URL থেকে ডাউনলোড করুন

আপনি যদি ইউনিটির WWW বা UnityWebRequest এর সাথে কোনো URL ব্যবহার করতে চান, তাহলে GetDownloadUrlAsync() কল করে কোনো ফাইলের ডাউনলোড URL পেতে পারেন।

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

ত্রুটিগুলি পরিচালনা করুন

ডাউনলোড করার সময় বিভিন্ন কারণে ত্রুটি ঘটতে পারে, যার মধ্যে রয়েছে ফাইলটির অস্তিত্ব না থাকা, অথবা কাঙ্ক্ষিত ফাইলটি অ্যাক্সেস করার জন্য ব্যবহারকারীর অনুমতি না থাকা। ত্রুটি সম্পর্কে আরও তথ্য ডকুমেন্টেশনের ' Handle Errors' বিভাগে পাওয়া যাবে।

পরবর্তী পদক্ষেপ

আপনি Cloud Storage সংরক্ষিত ফাইলগুলির মেটাডেটাও পেতে এবং আপডেট করতে পারেন।