پرش به مطلب اصلی

نوشتن یک فایل در فضای ذخیره‌سازی از دل یک اسکریپت

هدف​

کاری کنید یک API سفارشی یک فایل بسازد — یک برون‌داد CSV، یک فایل JSON برای سامانه‌ای دیگر — و آن را جایی بگذارد که سامانهٔ بیرونی بتواند برش دارد.

چرا این وجود دارد​

این سکو سه جا برای زندگی یک فایل دارد و این سه جایگزین یکدیگر نیستند.

براینمونه
منابع وبفایل‌هایی که بخشی از خودِ برنامه‌اندیک نشان، یک شیوه‌نامه
فایل‌های رکوردفایلی که به یک رکورد تعلق داردعکس یک مخاطب، یک قرارداد امضاشده
ذخیره‌سازی شیءفایل‌هایی که به هیچ رکوردی تعلق ندارندبرون‌داد ماهانه، فایل یک یکپارچه‌سازی

فایل یک رکورد به آن رکورد چسبیده است و با آن سفر می‌کند. یک برون‌داد به رکورد هیچ‌کس تعلق ندارد — سطری نیست که از آن آویزان شود — و ذخیره‌سازی شیء دقیقاً برای همین است.

پیش از آغاز​

به یک نام سطل نیاز دارید. لازم نیست آن را بسازید: نخستین نوشتن آن را می‌سازد.

نام سطل حروف کوچک انگلیسی، رقم و خط تیره است، ۳ تا ۶۳ نویسه. این نام‌ها میان همهٔ مستأجران مشترک‌اند — همان‌گونه که در S3 هستند — پس نامی ساده مانند exports ممکن است گرفته شده باشد؛ مانند par-exports زیر، پیشوندی از آنِ خودتان بگذارید.

یک اسکریپت چه می‌تواند بکند​

putFile(bucket, key, text)فایلی می‌نویسد. true پاسخ می‌دهد، یا false اگر نتوانست
putFileAs(bucket, key, text, contentType)همان، با گفتن اینکه چه نوع فایلی است
getFile(bucket, key)آن را به‌صورت متن باز می‌خواند — اگر نباشد، رشتهٔ تهی
fileExists(bucket, key)true یا false
listFiles(bucket, prefix)فایل‌های زیر یک پیشوند، هر یک با key، size، contentType و uploadedAt
deleteFile(bucket, key)یکی را برمی‌دارد

کلید مسیر فایل درون سطل است — claims/2026-09.csv. اسلش‌های آن تنها بخشی از نام‌اند، اما در صفحهٔ ذخیره‌سازی همچون پوشه خوانده می‌شوند، پس گروه‌بندی با آن‌ها ارزش دارد.

گام‌ها​

۱. راه‌حل خود را باز کنید و APIهای سفارشی را برگزینید، سپس جدید. ۲. مسیری به آن بدهید — claims/export/{period} — و Post را برگزینید. ۳. در اسکریپت، فایل را به‌صورت متن بسازید و بنویسید:

var claims = runQuery({ entity: 'par_claim', select: ['par_name', 'par_amount'] });

var csv: string = 'reference,amount\n';
for (var i: int = 0; i < claims.length(); i++) {
csv = csv + `${claims[i].par_name},${claims[i].par_amount}` + '\n';
}

putFileAs('par-exports', 'claims/' + getInput('period') + '.csv', csv, 'text/csv');

۴. ذخیره کنید و آن را فراخوانید.

سه چیزی که مردم را غافلگیر می‌کند​

  • length() به پرانتزهایش نیاز دارد. claims.length خطا نیست — هیچ است، پس حلقه‌ای که به آن تکیه کند هرگز اجرا نمی‌شود و برون‌داد شما یک سطر عنوان می‌شود و بس. این تنها اشتباه اینجاست که خود را اعلام نمی‌کند.
  • نمی‌توانید عدد را به رشته بیفزایید. 'Total: ' + amount رد می‌شود. به‌جایش عدد را در قالب بک‌تیک بگذارید — `Total: ${amount}` — که تنها راه تبدیل آن به متن است.
  • بگویید چه نوع فایلی است. putFile آن را متن ساده ذخیره می‌کند و مرورگر متن ساده را به‌جای ذخیره‌کردن، در زبانه نشان می‌دهد. از putFileAs با text/csv، application/json یا هر چه واقعاً هست استفاده کنید.

بررسی درستی کار​

به مدیریت ← ذخیره‌سازی بروید، سطل را باز کنید و فایل آنجاست با اندازه و نوعش. آن را بارگیری کنید و محتوایش را وارسی کنید.

این برای چه نیست​

  • فایل‌های دودویی بزرگ. فایل یک اسکریپت متنی است که خودش ساخته. تصویر، PDF و بایگانی را خودِ سکو می‌گرداند و آن‌ها را جریانی می‌فرستد.
  • فایلی که به یک رکورد تعلق دارد. به‌جایش ستونی از نوع فایل یا تصویر روی جدول بگذارید — زیر دسترسی‌های خودِ رکورد ارائه می‌شود و حذف رکورد فایل را با خود می‌برد.
  • دادن یک پیوند به کسی. این توابع متن را به اسکریپت شما می‌دهند؛ نشانی نمی‌سازند. پیوندی که بدون ورود کار کند کلیدی است که هر کس می‌تواند دست‌به‌دست کند، پس گامی سنجیده در جایی دیگر است نه کاری که اسکریپت در گذر انجام دهد.

عیب‌یابی​

«سطل پیدا نشد.» دارید سطلی را می‌خوانید یا فهرست می‌کنید که هنوز نیست — تنها نوشتن است که سطل می‌سازد. نخست بنویسید، یا املا را وارسی کنید.

چیزی جز سطر عنوان در فایل نیست. length بدون پرانتز. بالا را ببینید.

«تنها عدد یا رشته در این عبارت مجاز است.» عددی را به رشته‌ای افزوده‌اید. از قالب بک‌تیک استفاده کنید.

«این اجرا فراخوان ندارد.» اسکریپت یک گام افزونهٔ ناهمگام است. آن‌ها پس از پایان درخواستی که صف‌شان کرده اجرا می‌شوند، پس کسی نیست که به نامش عمل شود. از گامی همگام یا یک API سفارشی استفاده کنید.

همچنین ببینید​

  • انتشار یک API سفارشی
  • راه‌حل نمونهٔ custom-api-object-storage-export، که همین صفحه است به‌شکل چیزی که می‌توانید وارد کنید و اجرا کنید.