شعار أوراباسي
aurabaseمستندات
مستندات›أدلة›Store and serve files (SDK)

قم بتخزين الملفات وتقديمها باستخدام JavaScript SDK

التدفقات اليومية لـ aura.storage، مع ملاحظة قواعد الوصول مقابل المكدس قيد التشغيل.

8 د قراءة·المستوى وسيطة·تمت المراجعة في 12‏/10‏/2026
تم إنشاء هذا النص الإنجليزي تلقائيًا من النص الأصلي الفرنسي ولم تتم مراجعته بعد.
تمت ترجمة هذه الصفحة تلقائيًا. النسخة الإنجليزية موثوقة.
#
دلاء

1. الدلاء

يقوم الجرافة بتجميع الملفات ويقرر ما إذا كانت عامة أم لا. يحتاج إنشاء المجموعات وحذفها إلى مفتاح service_role. تحتاج قائمة هذه العناصر إلى مستخدم مسجل الدخول أو مفتاح service_role؛ المفتاح العام وحده يحصل على 403.

server/buckets.tstypescript
await admin.storage.createBucket('avatars', { public: true })   // يمكن لأي شخص قراءة الملفات
await admin.storage.createBucket('invoices', { public: false })  // لا يمكن إلا لصاحبها
const { data: buckets } = await admin.storage.listBuckets()

يقبل الدلو أيضًا fileSizeLimit (بالبايت) و allowedMimeTypes. يؤدي التحميل الكبير جدًا إلى 413، بينما يعرض النوع غير المسموح به 400.

#
ملفات

2. تحميل، تنزيل، قائمة، إزالة

files.tstypescript
const bucket = aura.storage.from('invoices')

// التحميل: ملف Blob أو ملف أو ArrayBuffer
const { data, error } = await bucket.upload(`${user.id}/2026-10.pdf`, file, {
  contentType: 'application/pdf',
})
// → { المفتاح، المجموعة، عنوان url، الحجم، content_type، etag }

// استبدال ملف موجود
await bucket.upload(`${user.id}/2026-10.pdf`, newFile, { upsert: true })

// قائمة مجلد، تحميل، إزالة
const { data: files } = await bucket.list(user.id)
const { data: blob } = await bucket.download(`${user.id}/2026-10.pdf`)
await bucket.remove([`${user.id}/2026-10.pdf`])

ماذا تتوقع:

  • يؤدي تحميل مسار موجود إلى إرجاع 409 إلا إذا قمت باجتياز upsert: true.
  • يحتاج التحميل إلى مستخدم مسجل الدخول أو مفتاح service_role. يحصل المفتاح العام وحده على 403، حتى بالنسبة للحاوية العامة.
  • تم رفض المسار الذي يحتوي على .. مع 400.
  • تتم مشاركة المسارات داخل مجموعة بيانات. إذا كان لدى مستخدم آخر المسار بالفعل، فستحصل على 409. ضع ملفات كل مستخدم ضمن المجلد الخاص به، مثل ${user.id}/….
#
شارك

3. مشاركة ملف

share.tstypescript
// ملف في مجموعة عامة: عنوان URL دائم، تم إنشاؤه بدون طلب
const { data } = aura.storage.from('avatars').getPublicUrl('ada.png')
// → { publicUrl: 'https://my-app.aurabase.cloud/v1/storage/avatars/ada.png' }

// ملف خاص: رابط مؤقت
const { data: signed } = await aura.storage.from('invoices').createSignedUrl(`${user.id}/2026-10.pdf`, 60)
// → { عنوان URL، تنتهي صلاحيته: 60 }

تم جلب كلا الرابطين بدون أي مفتاح وتم إرجاع الملف. يتوقف الارتباط الموقع عن العمل بعد expires_in ثانية. للسماح للمتصفح بالتحميل بدون مفتاح، يقوم الخادم بإصدار createSignedUploadUrl(path) (استدعاء service_role).

#
الوصول

4. من يستطيع أن يفعل ماذا؟

العملالمفتاح العاممستخدم مسجل الدخولservice_role
قراءة ملف في دلو عامنعمنعمنعم
قراءة، إدراج ملف في دلو خاصلاصاحبها فقطنعم
تحميللانعمنعم
استبدال أو إزالة ملفلاصاحبها فقطنعم
قائمة الدلاءلانعمنعم
إنشاء وحذف الدلاءلالانعم

المالك هو المستخدم الذي قام بتحميل الملف. في التشغيل الحقيقي، لا يستطيع المستخدم الثاني إدراج ملف المستخدم الأول أو تنزيله أو إزالته في حاوية خاصة، ولا يمكنه استبداله أيضًا.

#
الخادم

5. النقل والنسخ من الخادم

server/organise.tstypescript
await admin.storage.copy('invoices', 'a/hello.txt', 'a/copy.txt')
await admin.storage.move('invoices', 'a/copy.txt', 'a/moved.txt')
const { data: meta } = await admin.storage.getMetadata('invoices', 'a/hello.txt')

تم توضيح تغيير حجم الصورة في مرجع التخزين.