یک پروژه Firebase در واقع فقط یک پروژه Google Cloud است که پیکربندیها و سرویسهای اضافی مخصوص Firebase برای آن فعال شده است. این بدان معناست که هر سطل Cloud Storage که با Cloud Storage for Firebase استفاده میکنید، در Google Cloud (از جمله کنسول و APIهای آن) قابل دسترسی است.
ادغام با Google Cloud ، از جمله وارد کردن سطلهای Cloud Storage موجود، نیاز به یک پروژه Firebase در طرح قیمتگذاری Blaze با پرداخت در محل دارد .
ملاحظات مربوط به حسابهای خدماتی
فایربیس از حسابهای سرویس Google Cloud برای مدیریت و راهاندازی سرویسها بدون اشتراکگذاری اعتبارنامههای کاربری استفاده میکند. وقتی یک پروژه فایربیس ایجاد میکنید که از Cloud Storage استفاده میکند، ممکن است متوجه شوید که یک حساب سرویس مربوطه از قبل در پروژه شما موجود است: . برای اطلاعات بیشتر، به نمای کلی حسابهای سرویس فایربیس مراجعه کنید.
Google Cloud Storage
شما میتوانید از APIهای Google Cloud Storage برای دسترسی به فایلهای آپلود شده از طریق SDKهای Firebase برای Cloud Storage استفاده کنید، به خصوص برای انجام عملیات پیچیدهتر، مانند کپی یا انتقال یک فایل، یا فهرست کردن تمام فایلهای موجود در یک مرجع.
لازم به ذکر است که این درخواستها به جای Firebase Authentication و Cloud Storage Security Rules ، از گزینههای کنترل دسترسی Google Cloud Storage استفاده میکنند.
رابطهای برنامهنویسی کاربردی (API)
علاوه بر کیتهای توسعه Firebase برای Cloud Storage ، بسته به کاری که میخواهید انجام دهید، روشهای دیگری برای دسترسی به دادههای ذخیره شده در مخزن Cloud Storage شما وجود دارد. اگر به دادههای روی یک سرور دسترسی دارید، ما کتابخانههای سمت سرور و همچنین یک API XML RESTful سازگار با JSON و S3 را ارائه میدهیم، یا اگر نیاز به اسکریپتنویسی تغییرات یا انجام سایر وظایف مدیریتی دارید، ما یک ابزار خط فرمان داریم که مفید خواهد بود.
SDK های سرور Google Cloud
Google Cloud کیتهای توسعه نرمافزار (SDK) سرور با کیفیتی را برای تعدادی از محصولات ابری، از جمله Cloud Storage ارائه میدهد. این کتابخانهها در Node.js ، جاوا ، go ، پایتون ، PHP و Ruby در دسترس هستند.
برای اطلاعات بیشتر، از جمله دستورالعملهای نصب، احراز هویت و عیبیابی، به مستندات مربوط به پلتفرم که در بالا لینک شده است، مراجعه کنید.
مثالی از نحوهی استفاده از SDK Google Cloud Storage در زیر نشان داده شده است:
نود جی اس
// 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) {});
جاوا
// 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();
برو
// 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) }
پایتون
# 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()
پی اچ پی
// 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');
روبی
# 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}"
API رست
اگر از زبانی بدون کتابخانه کلاینت استفاده میکنید، میخواهید کاری انجام دهید که کتابخانههای کلاینت انجام نمیدهند، یا فقط یک کلاینت HTTP مورد علاقه دارید که ترجیح میدهید از آن استفاده کنید، Google Cloud Storage APIهایی را برای JSON و XML ارائه میدهد.
علاوه بر این APIهای دسترسی به دادههای ذخیرهسازی، برای مدیریت مخازن ذخیرهسازی ابری جهت استفاده در پروژههای Firebase، میتوانید از Cloud Storage for Firebase API استفاده کنید.
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 از Object Versioning پشتیبانی میکند که روشی خودکار برای پشتیبانگیری از دادههای شما و بازیابی از آن نسخههای پشتیبان فراهم میکند. میتوانید Object Versioning را با استفاده از دستور gsutil versioning set فعال کنید:
gsutil versioning set on gs://<your-cloud-storage-bucket>
Cloud Storage همیشه جدیدترین نسخه را انتخاب میکند، بنابراین اگر میخواهید یک شیء را بازیابی کنید، باید از یکی از APIها یا ابزارهای دیگر بالا برای تنظیم شیء مورد نظر به عنوان جدیدترین نسخه استفاده کنید.
مدیریت چرخه حیات شیء
داشتن قابلیت بایگانی یا حذف خودکار فایلهای قدیمی، یک ویژگی مفید برای بسیاری از برنامهها است. خوشبختانه، Google Cloud Storage مدیریت چرخه حیات اشیاء را ارائه میدهد که به شما امکان میدهد اشیاء را پس از مدت زمان مشخصی حذف یا بایگانی کنید.
یک برنامه اشتراکگذاری عکس را در نظر بگیرید که میخواهید تمام عکسها ظرف یک روز حذف شوند. میتوانید سیاست چرخه حیات شیء را به صورت زیر تنظیم کنید:
// lifecycle.json { "lifecycle": { "rule": [ { "action": {"type": "Delete"}, "condition": {"age": 1} } ] } }
و آن را با استفاده از دستور gsutil lifecycle set مستقر کنید:
gsutil lifecycle set lifecycle.json gs://<your-cloud-storage-bucket>
توجه داشته باشید که این مورد برای همه فایلهای موجود در سطل اعمال میشود، بنابراین اگر پشتیبانهای مهم کاربری را که میخواهید برای مدت طولانی در کنار عکسهایی که میخواهید روزانه حذف کنید، ذخیره میکنید، ممکن است بخواهید از دو سطل جداگانه استفاده کنید یا حذفها را به صورت دستی با gsutil یا سرور خودتان انجام دهید.
قابلیتهای گوگل کلود (بتا)
توابع ابری گوگل (Google Cloud Functions) یک راهکار محاسباتی سبک، مبتنی بر رویداد و غیرهمزمان است که به شما امکان میدهد توابع کوچک و تکمنظورهای ایجاد کنید که بدون نیاز به مدیریت سرور یا محیط اجرا، به رویدادها پاسخ میدهند. این توابع میتوانند برای کدگذاری ویدیو، طبقهبندی تصاویر با استفاده از یادگیری ماشین یا همگامسازی ابرداده با Firebase Realtime Database استفاده شوند. توابع ابری با سربار حتی کمتر از App Engine ، سریعترین راه برای واکنش به تغییرات در Cloud Storage هستند.
رابط برنامهنویسی کاربردی گوگل کلود ویژن
رابط برنامهنویسی کاربردی گوگل کلود ویژن (Google Cloud Vision API) با گنجاندن مدلهای قدرتمند یادگیری ماشین در یک رابط برنامهنویسی کاربردی (API) که استفاده از آن آسان است، به توسعهدهندگان این امکان را میدهد تا محتوای یک تصویر را درک کنند. این رابط به سرعت تصاویر را به هزاران دسته طبقهبندی میکند، اشیاء و چهرههای منفرد را در تصاویر تشخیص میدهد، کلمات چاپ شده موجود در تصاویر را پیدا و میخواند، محتوای توهینآمیز را شناسایی میکند و حتی تجزیه و تحلیل احساسات تصویر را ارائه میدهد.
رابط برنامهنویسی کاربردی گفتار ابری گوگل
مشابه Vision API، Google Cloud Speech API به توسعهدهندگان این امکان را میدهد که متن را از یک فایل صوتی ذخیره شده در Cloud Storage استخراج کنند. این API بیش از ۸۰ زبان و گونه را تشخیص میدهد تا از پایگاه کاربر جهانی شما پشتیبانی کند. هنگامی که با Google Cloud Natural Language API ترکیب شود، توسعهدهندگان میتوانند هم متن خام را استخراج کنند و هم معنی آن متن را استنباط کنند. و اگر به مخاطب جهانی نیاز باشد، این را با Google Translate API ترکیب کنید تا متن را به بیش از ۹۰ زبان ترجمه کنید.
Google App Engine
Google App Engine ) یک «پلتفرم به عنوان سرویس» است که به طور خودکار منطق بکاند را در پاسخ به میزان ترافیکی که دریافت میکند، مقیاسبندی میکند. فقط کد بکاند خود را آپلود کنید و گوگل در دسترس بودن برنامه شما را مدیریت خواهد کرد؛ هیچ سروری برای تهیه یا نگهداری شما وجود ندارد. App Engine روشی سریع و سرراست برای افزودن قدرت پردازش اضافی یا اجرای قابل اعتماد به برنامه Firebase شما است.
اگر یک مخزن Cloud Storage پیشفرض با فرمت نام داریدPROJECT_ID .appspot.com ، آنگاه به طور خودکار با یک برنامه App Engine در پروژه شما به اشتراک گذاشته میشود. این بدان معناست که اگر یک برنامه App Engine بسازید، میتوانید از APIهای داخلی App Engine برای اشتراکگذاری دادهها بین آن سطل و App Engine استفاده کنید. این امر برای انجام رمزگذاری صدا، تبدیل کد ویدیو و تبدیل تصویر و همچنین سایر پردازشهای پسزمینه که به محاسبات فشرده نیاز دارند، مفید است.
محیطهای استاندارد جاوا، پایتون و گو برای App Engine شامل API تصاویر App Engine ( Java | Python | Go ) میشود که میتواند یک تصویر را تغییر اندازه، چرخش، وارونه کردن و برش دهد، و همچنین یک URL ارائه دهنده تصویر را برگرداند که امکان تبدیلهای سمت کلاینت را فراهم میکند، مشابه Cloudinary و Imgix.
هنگام وارد کردن یک پروژه Google Cloud موجود به Firebase، اگر میخواهید اشیاء App Engine موجود را در Firebase در دسترس قرار دهید، باید کنترل دسترسی پیشفرض را روی اشیاء خود تنظیم کنید تا Firebase بتواند با اجرای دستور زیر با استفاده از gsutil به آنها دسترسی داشته باشد:
gsutil -m acl ch -r -u service-PROJECT_NUMBER@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://BUCKET_NAME
ملاحظات مربوط به Firebase Security Rules و فایلهای App Engine
اگر یک باکت Cloud Storage پیشفرض با فرمت نام ... دارید*.appspot.com ، آنگاه پروژه شما یک برنامه App Engine نیز دارد که آن سطل را به اشتراک میگذارد.
اگر Firebase Security Rules خود را برای دسترسی عمومی (بدون احراز هویت) پیکربندی کنید، فایلهای App Engine که اخیراً آپلود شدهاند را نیز به صورت عمومی در دسترس قرار خواهید داد.
مشکلات شناختهشده برای Cloud Storage و App Engine
دو مورد شناخته شده وجود دارد که در آنها نمیتوانید برنامه App Engine خود را وارد کنید:
- این پروژه شامل یک برنامهی App Engine Datastore Master/Slave سابق است.
- این پروژه دارای یک شناسه پروژه با پیشوند دامنه است، برای مثال:
domain.com:project-1234.
در هیچ یک از این موارد، پروژه از Cloud Storage for Firebase پشتیبانی نمیکند و شما باید یک پروژه فایربیس جدید ایجاد کنید تا Cloud Storage استفاده کنید. برای کمک به شما با پشتیبانی تماس بگیرید .