کار با فایل‌ها و پوشه‌ها - Unity

در این مستند شما با همه‌ی قابلیت‌های سرویس فایل از طریق SDK یونیتی آشنا خواهید شد.

پیش‌نیازها

  1. در صورتی که با سرویس فایل آشنایی ندارید، به معرفی سرویس فایل مراجعه کنید.
  2. در صورتی که هنوز در پنل توسعه‌دهنده خود تنظیمات لازم برای سرویس فایل خود را انجام نداده‌اید، به تنظیمات پنل مراجعه کنید.
  3. در صورتی که هنوز SDK یونیتی را راه‌اندازی نکرده‌اید، به راه‌اندازی SDK بکتوری در یونیتی مراجعه کنید.

آپلود فایل

نکته: دقت کنید که با توجه به ظرفیت کم حافظه در گوشی‌های موبایل، آپلود فایل به کمک sdk بکتوری فعلا تنها برای فایل‌های کم‌حجم در دسترس است و در غیر این صورت، خطر crash به خاطر کمبود memory وجود دارد. هم‌چنین، عمل آپلود محدود به زنده بودن اپلیکیشن است؛ یعنی، در صورتی که اپلیکیشن در میانه‌ی آپلود kill شود، عمل آپلود ناموفق خواهد بود.

برای آن‌که بتوانید یک فایل را از روی دستگاه موبایل کاربر به سرور بکتوری آپلود کنید، کدی مانند زیر لازم است:

BacktoryFile backtoryFile = new BacktoryFile ("<FILE-PATH-ON-DEVICE>");
backtoryFile.UploadInBackground ("<UPLOAD-PATH>", true, (response) => {
    if (response.Successful) {
        string filePathOnServer = response.Body;
        Debug.Log("Upload was successful. File path on server (url) is " + filePathOnServer);
    } else {
        Debug.Log("failed; " + response.Message);
    }
});

آرگومان‌هایی که تابع UploadInBackground دریافت می‌کند، به ترتیب به صورت زیر است:

نکته: در صورتی که پوشه‌های درخواست شده وجود نداشته باشد، سرویس آپلود به صورت پیشفرض این پوشه‌ها را خواهد ساخت.

در صورتی که عمل آپلود با موفقیت انجام شود، response.Body برابر مسیر فایل آپلود شده خواهد بود. دقت کنید که این مسیر با رشته‌ی آرگومان uploadPath که شما به عنوان ورودی پاس داده‌اید، ممکن است در شرایطی فرق کند! در واقع، اگر رشته‌ی uploadPath صرفا شامل حروف کوچک یا بزرگ انگلیسی و یا اعداد باشد، عینا همان پوشه‌ی مشخص شده در response.Body خواهد بود. اما در صورتی که شامل کارکترهای ویژه، کارکتر فاصله، حروف فارسی و … باشد، response.Body رشته‌ی کاملا متفاوتی خواهد بود. به عنوان مثال، فرض کنید داریم:

string filePathOnDevice = "file 1 .txt";
string uploadPath = "/path/to/";

یعنی، یک کارکتر فاصله قبل و بعد از حرف ۱ در نام فایل وجود داشته باشد. در این صورت، response.Body به صورت

"/path/to/file%201%20.txt"

خواهد بود. بنابراین، مهم است که به جای رشته‌ی uploadPath، رشته‌ی response.Body را به عنوان آدرس فایل روی سرور برای ارجاع‌های بعدی نگه دارید.

تغییر نام فایل

برای آن‌که بتوانید نام فایلی را که سمت سرور آپلود شده است، تغییر دهید، می‌بایست به صورت زیر عمل کنید:

BacktoryFile.RenameInBackground ("<URL>", "<NEW-NAME>", (response) => {
    if (response.Successful) {
        string renamedFilePath = response.Body;
        Debug.Log("Rename was successful. New file url is " + renamedFilePath);
    } else {
        Debug.Log("failed; " + response.Message);
    }
});

آرگومان‌هایی که تابع RenameInBackground دریافت می‌کند، به ترتیب به صورت زیر است:

در صورتی که عمل تغییر نام موفقیت‌آمیز باشد، response.Body برابر آدرس جدید فایل در سمت سرور خواهد بود. دقت کنید که علاوه بر این‌که مشابه قسمت قبل، کارکترهای ویژه هم‌چون فاصله، & و … به صورت encode شده در پاسخ سرور ظاهر می‌شوند، رشته‌ی response.Body حاوی یک ویژگی مهم دیگر نیز هست؛ و آن این‌که نام مخزن شما در ابتدای url برگردانده شده وجود دارد!

به عنوان مثال، فرض کنید آرگومان‌هایی که به تابع تغییر نام پاس می‌دهیم، به صورت زیر هستند:

string url = "/path/to/file1.txt";
string newName = "newFile 1&.txt";

در صورتی که عملیات تغییر نام موفقیت‌آمیز باشد، response.Body برابر خواهد بود با

"/pegah/path/to/newFile%201%26.txt"

که pegah مثلا نام مخزن شماست! برای این‌که بتوانید به راحتی نام مخزن را از ابتدای این url ها که در جواب درخواست تغییر نام برگردانده می‌شوند، حذف کنید، کافیست تابع زیر را روی response.Body صدا بزنید:

string correctUrl = BacktoryFile.RemoveBucketNameFromRenameResponse (response.Body);

و برای ارجاع‌های بعدی به فایل، رشته‌ی correctUrl را نگاه دارید.

حذف فایل/پوشه

برای آن‌که یک فایل یا پوشه را در سمت سرور حذف کنید، متد زیر از sdk بکتوری به کمک شما می‌آید:

BacktoryFile.DeleteInBackground ("<URL>", true, (response) => {
    if (response.Successful) {
        Debug.Log("Delete was successful.");
    } else {
        Debug.Log("failed; " + response.Message);
    }
});

آرگومان‌هایی که تابع DeleteInBackground دریافت می‌کند، به صورت زیر هستند:

اعمال دسته‌ای بر روی فایل‌ها

در قسمت‌های قبل یاد گرفتیم که چگونه می‌توان در sdk بکتوری تنها «یک» فایل را آپلود یا حذف کرد و یا تغییر نام داد. قابلیت دیگری که به کمک sdk وجود دارد، این است که همه‌ی این کارها را، نه روی «یک» فایل، بلکه روی «دسته‌ای» از فایل‌ها انجام دهیم. در ادامه با نحوه‌ی انجام این اعمال آشنا خواهید شد.

آپلود دسته‌ای فایل‌ها

برای آپلود فایل‌ها به صورت دسته‌ای کد زیر مورد استفاده قرار می‌گیرد:

new BacktoryFile.Bulk().UploadInBackground(fileAddresses, uploadPaths, replaces,
    (response) => {
    if (response.Successful) {
        IList<string> filesPathsOnServer = response.Body;
        for(int i = 0; i < filesPathsOnServer.Count; i++) {
            Debug.Log(i + "'th file path on server: " + filesPathsOnServer[i]);
        }
    } else {
        Debug.Log("failed; " + response.Message);
    }
});

آرگومان‌هایی که تابع UploadInBackground دریافت می‌کند، به ترتیب به صورت زیر است:

همان‌طور که از کد بالا نیز واضح است، در صورتی که عمل آپلود موفقیت‌آمیز باشد، response.Body برابر لیست مسیرهای فایل‌های آپلود شده خواهد بود. توضیحات قسمت‌های قبل در مورد تفاوت response.Body با uploadPaths نیز کماکان در این‌جا برقرار هستند. یعنی، برای ارجاع‌های بعدی به فایل‌های آپلود شده نیاز است که از مسیرهای معتبر response.Body استفاده کنید.

تغییر نام دسته‌ای فایل‌ها

برای تغییر نام فایل‌ها به صورت دسته‌ای کد زیر مورد استفاده قرار می‌گیرد:

new BacktoryFile.Bulk ().RenameInBackground (fileSavedUrls, newNames, (response) => {
    if (response.Successful) {
        IList<string> renamedFilesPaths = response.Body;
        for(int i = 0; i < renamedFilesPaths.Count; i++) {
            Debug.Log(i + "'th file path on server: " + renamedFilesPaths[i]);
        }
    } else {
        Debug.Log("failed; " + response.Message);
    }
});

آرگومان‌هایی که تابع RenameInBackground دریافت می‌کند، به ترتیب به صورت زیر است:

همان‌طور که از کد بالا نیز واضح است، در صورتی که عمل تغییر نام موفقیت‌آمیز باشد، response.Body برابر لیست آدرس‌های جدید فایل‌ها خواهد بود. توضیحات قسمت‌های قبل در مورد ویژگی‌های مهم response.Body نیز کماکان در این‌جا برقرار هستند. یعنی، برای ارجاع‌های بعدی به فایل‌های تغییر نام یافته نیاز است که از مسیرهای معتبر response.Body استفاده کرده و برای حذف نام مخزن از ابتدای url ها می‌بایست از تابع

BacktoryFile.RemoveBucketNameFromRenameResponse

استفاده کنید.

حذف دسته‌ای فایل‌ها/پوشه‌ها

برای حذف فایل‌ها به صورت دسته‌ای کد زیر مورد استفاده قرار می‌گیرد:

new BacktoryFile.Bulk ().DeleteInBackground (resourceUrls, deleteContentsIfFolderList, (response) => {
    if (response.Successful) {
        Debug.Log("Delete was successful.");
    } else {
        Debug.Log("failed; " + response.Message);
    }
});

آرگومان‌هایی که تابع DeleteInBackground دریافت می‌کند، به ترتیب به صورت زیر است:

به این ترتیب، شما با همه‌ی قابلیت‌های sdk بکتوری برای کار با فایل‌ها و پوشه‌ها آشنا شدید.