Unity-র জন্য Cloud Storage-এর মাধ্যমে ফাইল আপলোড করা

Cloud Storage for Firebase আপনাকে Firebase-এর মাধ্যমে প্রদান করা ও ম্যানেজ করা Cloud Storage বাকেটে দ্রুত ও সহজে ফাইল আপলোড করার সুবিধা দেয়।

রেফারেন্স তৈরি করা

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

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

// 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() একটি 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 (সাধারণত 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> ইন্টারফেস অনুসরণ করে। প্রোগ্রেস টিকের জন্য কলব্যাক হিসেবে আপনার নিজস্ব 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.");
    }
});

সমস্যা ম্যানেজ করা

আপলোড করার সময় বিভিন্ন কারণে সমস্যা হতে পারে, যেমন লোকাল ফাইল না থাকা অথবা ব্যবহারকারীর কাছে কাঙ্খিত ফাইল আপলোড করার অনুমতি না থাকা। আপনি ডকুমেন্টের সমস্যার সমাধান করুন বিভাগে সমস্যা সম্পর্কে আরও তথ্য পেতে পারেন।

পরবর্তী ধাপ

আপনি ফাইল আপলোড করেছেন, এবার Cloud Storage থেকে সেগুলি কীভাবে ডাউনলোড করবেন তা জেনে নিন।