إنّ مشروع Firebase هو في الواقع مجرّد مشروع Google Cloud تم تفعيل إعدادات وخدمات إضافية خاصة بـ Firebase له. يعني ذلك أنّه يمكن الوصول إلى كلّ سِجلّ Cloud Storage تستخدمه مع Cloud Storage for Firebase في Google Cloud (بما في ذلك وحدته تحكّمه وواجهات برمجة التطبيقات الخاصة به).
اعتبارات حسابات الخدمة
تستخدم Firebase حسابات خدمة Google Cloud لتشغيل الخدمات وإدارتها
بدون مشاركة بيانات اعتماد المستخدمين. عند إنشاء مشروع Firebase يستخدم
Cloud Storage، قد تلاحظ أنّ حساب خدمة مطابقًا متاحًا في مشروعك:
.
لمزيد من المعلومات، يُرجى الاطّلاع على
نظرة عامة على حسابات خدمة Firebase.
Google Cloud Storage
يمكنك استخدام Google Cloud Storage APIs للوصول إلى الملفات التي تم تحميلها من خلال Firebase SDKs لـ Cloud Storage، خاصةً لتنفيذ عمليات أكثر تعقيدًا، مثل نسخ ملف أو نقله أو إدراج جميع الملفات المتاحة في مرجع.
من المهم ملاحظة أنّ هذه الطلبات تستخدم Google Cloud Storage خيارات التحكّم في الوصول، بدلاً من Firebase Authentication وCloud Storage Security Rules.
واجهات برمجة التطبيقات
بالإضافة إلى حِزم Firebase SDK لخدمة Cloud Storage، هناك عدد من الطرق الأخرى
للوصول إلى البيانات المخزّنة في سِجلّ Cloud Storage، وذلك حسب ما تريد فعله. إذا كنت تصل إلى البيانات على خادم، نقدّم مكتبات من جهة الخادم، بالإضافة إلى واجهة برمجة تطبيقات RESTful بتنسيق JSON وXML متوافق مع S3، أو إذا كنت
بحاجة إلى كتابة تغييرات أو تنفيذ مهام إدارية أخرى، لدينا أداة
سطر أوامر ستكون مفيدة لك.
Google Cloud حِزم SDK من جهة الخادم
Google Cloud تقدّم حِزم SDK عالية الجودة من جهة الخادم لعدد من المنتجات السحابية، بما في ذلك Cloud Storage. تتوفّر هذه المكتبات في Node.js و Java و Go و Python و PHP و Ruby.
لمزيد من المعلومات، بما في ذلك تعليمات التثبيت والمصادقة وحلّ المشاكل، يُرجى الرجوع إلى المستندات الخاصة بالمنصة والمرتبطة أعلاه.
في ما يلي مثال على استخدام Google Cloud Storage SDK:
Node.js
// Require gcloud var gcloud = require('google-cloud'); // Enable Cloud Storage var gcs = gcloud.storage({ projectId: 'grape-spaceship-123', keyFilename: '/path/to/keyfile.json' }); // Reference an existing bucket. var bucket = gcs.bucket('my-existing-bucket'); // Upload a local file to a new file to be created in your bucket. bucket.upload('/photos/zoo/zebra.jpg', function(err, file) { if (!err) { // "zebra.jpg" is now in your bucket. } }); // Download a file from your bucket. bucket.file('giraffe.jpg').download({ destination: '/photos/zoo/giraffe.jpg' }, function(err) {});
Java
// Enable Cloud Storage Storage storage = StorageOptions.builder() .authCredentials(AuthCredentials.createForJson(new FileInputStream("/path/to/my/key.json")) .build() .service(); // Upload a local file to a new file to be created in your bucket. InputStream uploadContent = ... BlobId blobId = BlobId.of("my-existing-bucket", "zebra.jpg"); BlobInfo blobInfo = BlobInfo.builder(blobId).contentType("text/plain").build(); Blob zebraBlob = storage.create(blobInfo, content); // Download a file from your bucket. Blob giraffeBlob = storage.get("my-existing-bucket", "giraffe.jpg", null); InputStream downloadContent = giraffeBlob.getInputStream();
Go
// Enable Cloud Storage client, err := storage.NewClient(ctx, option.WithServiceAccountFile("path/to/keyfile.json")) if err != nil { log.Fatal(err) } // Download a file from your bucket. rc, err := client.Bucket("my-existing-bucket").Object("giraffe.jpg").NewReader(ctx) if err != nil { log.Fatal(err) } defer rc.Close() body, err := ioutil.ReadAll(rc) if err != nil { log.Fatal(err) }
Python
# Import gcloud from google.cloud import storage # Enable Cloud Storage client = storage.Client() # Reference an existing bucket. bucket = client.get_bucket('my-existing-bucket') # Upload a local file to a new file to be created in your bucket. zebraBlob = bucket.get_blob('zebra.jpg') zebraBlob.upload_from_filename(filename='/photos/zoo/zebra.jpg') # Download a file from your bucket. giraffeBlob = bucket.get_blob('giraffe.jpg') giraffeBlob.download_as_string()
PHP
// Require gcloud require 'vendor/autoload.php'; use Google\Cloud\Storage\StorageClient; // Enable Cloud Storage $storage = new StorageClient([ 'projectId' => 'grape-spaceship-123' ]); // Reference an existing bucket. $bucket = $storage->bucket('my-existing-bucket'); // Upload a file to the bucket. $bucket->upload( fopen('/photos/zoo/zebra.jpg', 'r') ); // Download a file from your bucket. $object = $bucket->object('giraffe.jpg'); $object->downloadToFile('/photos/zoo/giraffe.jpg');
Ruby
# Require gcloud require "google/cloud" # Enable Cloud Storage gcloud = Google::Cloud.new "grape-spaceship-123", "/path/to/keyfile.json" storage = gcloud.storage # Reference an existing bucket. bucket = storage.bucket "my-existing-bucket" # Upload a file to the bucket. bucket.create_file "/photos/zoo/zebra.jpg", "zebra.jpg" # Download a file from your bucket. file = bucket.file "giraffe.jpg" file.download "/photos/zoo/#{file.name}"
واجهة برمجة تطبيقات REST
إذا كنت تستخدم لغة بدون مكتبة عميل، أو تريد تنفيذ إجراء لا تنفّذه مكتبات العميل، أو كان لديك مجرّد عميل HTTP مفضّل تريد استخدامه، تقدّم Google Cloud Storage واجهات برمجة تطبيقات لكل من JSON وXML.
بالإضافة إلى واجهات برمجة التطبيقات هذه للوصول إلى بيانات التخزين، يمكنك استخدام Cloud Storage for Firebase API لإدارة سِجلّات Cloud Storage لاستخدامها في مشاريع Firebase.
gsutil
gsutil هي أداة سطر
أوامر تمنحك إمكانية الوصول المباشر إلى Cloud Storage. يمكنك استخدام gsutil لتنفيذ مجموعة كبيرة من مهام إدارة السِجلّات والعناصر، بما في ذلك:
- تحميل العناصر وتنزيلها وحذفها
- إدراج السِجلّات والعناصر
- نقل العناصر ونسخها وإعادة تسميتها
- تعديل قوائم التحكّم بالوصول (ACL) للعناصر والسِجلّات
تسمح أداة gsutil بتنفيذ عمليات متقدّمة أخرى، مثل نقل الملفات من دليل إلى آخر، أو حذف جميع الملفات أسفل موقع معيّن.
إنّ نقل جميع الملفات من مرجع إلى آخر أمر سهل:
gsutil mv gs://bucket/old/reference gs://bucket/new/reference
وبالمثل، فإنّ الحذف المجمّع لجميع الملفات أسفل مرجع هو أمر سهل:
# Delete all files under a path gsutil rm -r gs://bucket/reference/to/delete# Delete all the files in a bucket but not the bucket gsutil rm -r gs://bucket/**
# Delete all the files AND the bucket # Removing the default bucket will break the Firebase SDKs for Cloud Storage and is strongly discouraged gsutil rm -r gs://bucket
معدّلات الطلبات
Google Cloud Storage هي خدمة قابلة للتوسّع بدرجة كبيرة تستخدم تكنولوجيا التوسّع التلقائي لتحقيق معدّلات طلبات عالية جدًا.
Google Cloud Storage هي خدمة متعددة المستأجرين، ما يعني أنّ المستخدمين يتشاركون المجموعة نفسها من الموارد الأساسية. لتحقيق أفضل استفادة من هذه الموارد المشترَكة، يكون للسِجلّات سعة إدخال/إخراج أولية.
أثناء التخطيط لدمج Cloud Storage for Firebase في تطبيقك، فكِّر في الحد الأدنى لمعدّل الطلبات الذي يحتاجه تطبيقك لتحقيق أداء جيد، وفي تقديم الطلبات بكفاءة. راجِع الإرشادات حول معدّلات الطلبات، وخاصةً زيادة معدّلات الطلبات تدريجيًا.
التحكّم في إصدارات العناصر
هل سبق لك حذف ملف عن طريق الخطأ ولم يكن لديك نسخة احتياطية منه؟
Google Cloud Storage تتيح ميزة التحكّم في إصدارات العناصر
،
ما يوفّر طريقة تلقائية للاحتفاظ بنسخة احتياطية من بياناتك واستعادتها من هذه
النسخ الاحتياطية. يمكنك تفعيل ميزة التحكّم في إصدارات العناصر باستخدام الأمر versioning set في gsutil:
gsutil versioning set on gs://<your-cloud-storage-bucket>
Cloud Storage تختار دائمًا أحدث إصدار، لذا إذا أردت استعادة عنصر، عليك استخدام إحدى واجهات برمجة التطبيقات أو الأدوات الأخرى أعلاه لضبط العنصر المطلوب كأحدث عنصر.
إدارة دورة حياة العناصر
إنّ القدرة على أرشفة الملفات القديمة أو حذفها تلقائيًا هي ميزة مفيدة للعديد من التطبيقات. لحسن الحظ، توفّر Google Cloud Storage ميزة إدارة دورة حياة العناصر، ما يتيح لك حذف العناصر أو أرشفتها بعد فترة زمنية معيّنة.
لنفترض أنّ لديك تطبيقًا لمشاركة الصور وتريد حذف جميع الصور في غضون يوم واحد. يمكنك إعداد سياسة دورة حياة العناصر على النحو التالي:
// lifecycle.json { "lifecycle": { "rule": [ { "action": {"type": "Delete"}, "condition": {"age": 1} } ] } }
ونشرها باستخدام الأمر lifecycle set في gsutil:
gsutil lifecycle set lifecycle.json gs://<your-cloud-storage-bucket>
يُرجى العِلم أنّ هذا الإجراء ينطبق على جميع الملفات في السِجلّ، لذا إذا كنت تخزِّن نسخًا احتياطية مهمة للمستخدمين تريد الاحتفاظ بها لفترة طويلة جنبًا إلى جنب مع الصور التي تريد حذفها يوميًا، قد تحتاج إلى استخدام سِجلّين منفصلَين أو تنفيذ عمليات الحذف يدويًا باستخدام gsutil أو الخادم الخاص بك.
Google Cloud Functions (إصدار تجريبي)
Google Cloud Functions هو حلّ حوسبة خفيف الوزن وغير متزامن يستند إلى الأحداث، ما يتيح لك إنشاء دوال صغيرة ذات غرض واحد تستجيب للأحداث بدون الحاجة إلى إدارة خادم أو بيئة وقت التشغيل. يمكن استخدام هذه الدوال لـ ترميز الفيديوهات أو تصنيف الصور باستخدام تعلُّم الآلة أو مزامنة البيانات الوصفية مع Firebase Realtime Database. تتميّز Cloud Functions بأنّها أسرع طريقة للاستجابة للتغييرات في Cloud Storage، وذلك لأنّها تتطلّب نفقات أقل من App Engine.
Google Cloud Vision API
تتيح Google Cloud Vision API للمطوّرين فهم محتوى الصورة من خلال تغليف نماذج متقدّمة لتعلُّم الآلة في واجهة برمجة تطبيقات سهلة الاستخدام. تصنّف واجهة برمجة التطبيقات الصور بسرعة في آلاف الفئات، وترصد العناصر والوجوه الفردية داخل الصور، وتعثر على الكلمات المطبوعة الواردة في الصور وتقرأها، وتحدّد المحتوى المسيء، وتوفّر حتى تحليلًا لمشاعر الصورة.
Google Cloud Speech API
على غرار Vision API، تتيح Google Cloud Speech API للمطوّرين استخراج النص من ملف صوتي مخزّن في Cloud Storage. تتعرّف واجهة برمجة التطبيقات على أكثر من 80 لغة وإصدارًا لدعم قاعدة المستخدمين العالمية. عند دمجها مع الـ Google Cloud Natural Language API، يمكن للمطوّرين استخراج النص الأولي واستنتاج المعنى من هذا النص. وإذا كان الجمهور العالمي مطلوبًا، يمكنك دمج ذلك مع الـ Google Translate API لترجمة النص إلى أكثر من 90 لغة.
Google App Engine
Cloud Storage for Firebase تستخدم تنسيقَين مختلفَين لتسمية السِجلّات التلقائية وذلك حسب تاريخ إنشاء السِجلّ:
- السِجلّ التلقائي الذي تم إنشاؤه بعد
سبتمبر 2024 : تكون السِجلّات التلقائية مستقلة عن Google App Engine.*.firebasestorage.app - السِجلّات التلقائية القديمة:
تتم مشاركة السِجلّات التلقائية مع Google App Engine.*.appspot.com
Google App Engine هي "منصة كخدمة" تعمل على توسيع نطاق منطق الخلفية تلقائيًا استجابةً لحجم الزيارات التي تتلقّاها. ما عليك سوى تحميل رمز الخلفية وستدير Google مدى توفّر تطبيقك، ولن تحتاج إلى توفير أي خوادم أو صيانتها. App Engine هي طريقة سريعة و مباشرة لإضافة قوة معالجة إضافية أو تنفيذ موثوق به إلى تطبيقك على Firebase.
دمج App Engine القديم
إذا كان لديك سِجلّ تلقائي قديم *.appspot.com
تتضمّن البيئات العادية لـ Java وPython وGo لـ App Engine واجهة برمجة التطبيقات App Engine Images API (Java | Python | Go)، التي يمكنها تغيير حجم الصورة وتدويرها وعكسها واقتصاصها، بالإضافة إلى عرض عنوان URL لعرض الصور الذي يتيح إجراء عمليات التحويل من جهة العميل، على غرار Cloudinary وImgix.
اعتبارات السِجلّ المشترَك
إذا كنت تستخدم السِجلّ التلقائي القديم *.appspot.com
Firebase Security Rules وApp Engine ملفات: تتشارك الملفات التي يتم تحميلها باستخدام App Engine السِجلّ نفسه وتخضع لإعدادات الأمان نفسها. إذا ضبطت Firebase Security Rules للوصول العلني، سيصبح بإمكان الجميع الوصول إلى ملفات App Engine التي تم تحميلها حديثًا.
ضبط الأذونات: عند استيراد مشروع حالي على Google Cloud إلى Firebase، قد تحتاج إلى ضبط التحكّم التلقائي في الوصول إلى العناصر للسماح لـ Firebase بالوصول إليها. نفِّذ الأمر التالي باستخدام
gsutil:gsutil -m acl ch -r -u service-PROJECT_NUMBER@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://BUCKET_NAME
المشاكل المعروفة في Cloud Storage وApp Engine
هناك حالتان معروفتان لا يمكنك فيهما استيراد تطبيقك على App Engine:
يحتوي المشروع على تطبيق سابق على App Engine Datastore Master/Slave.
يحتوي المشروع على رقم تعريف مشروع مسبوق بنطاق، على سبيل المثال:
domain.com:project-1234.
في أيّ من هاتَين الحالتَين، لن يتيح المشروع استخدام Cloud Storage for Firebase، وعليك إنشاء مشروع جديد على Firebase لاستخدام Cloud Storage. إذا كانت لديك أسئلة، يُرجى التواصل مع فريق دعم Firebase.