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

Cloud Storage for 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 বাকেটের রুটের রেফারেন্স ব্যবহার করে ডেটা আপলোড করতে পারবেন না। আপনার রেফারেন্সটি অবশ্যই একটি চাইল্ড ইউআরএল-কে নির্দেশ করতে হবে।

ফাইল আপলোড করুন

একবার আপনার কাছে রেফারেন্স থাকলে, আপনি দুটি উপায়ে 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 type নামে পরিচিত) থাকে। PutFileAsync() মেথডটি ফাইলের এক্সটেনশন থেকে স্বয়ংক্রিয়ভাবে কন্টেন্ট টাইপ অনুমান করে, কিন্তু আপনি মেটাডেটাতে ContentType উল্লেখ করে এই স্বয়ংক্রিয়ভাবে শনাক্ত করা টাইপটিকে ওভাররাইড করতে পারেন। যদি আপনি কোনো ContentType প্রদান না করেন এবং Cloud Storage ফাইল এক্সটেনশন থেকে কোনো ডিফল্ট টাইপ অনুমান করতে না পারে, তাহলে Cloud Storage application/octet-stream ব্যবহার করে। ফাইল মেটাডেটা সম্পর্কে আরও তথ্যের জন্য "Use File Metadata" বিভাগটি দেখুন।

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

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

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

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

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