پروژه Firebase در واقع فقط یک پروژه Google Cloud است که تنظیمات و سرویسهای اضافی مخصوص Firebase را برای آن فعال کرده است. این بدان معنی است که هر سطل Cloud Storage که با Cloud Storage for Firebase استفاده می کنید در Google Cloud (از جمله کنسول و API های آن) قابل دسترسی است.
ادغام با Google Cloud ، از جمله وارد کردن سطلهای Cloud Storage موجود، به یک پروژه Firebase در طرح قیمتگذاری Blaze نیاز دارد.
ملاحظات برای حساب های خدمات
Firebase از حسابهای سرویس Google Cloud برای کار و مدیریت سرویسها بدون اشتراکگذاری اطلاعات کاربری استفاده میکند. وقتی یک پروژه Firebase ایجاد میکنید که از Cloud Storage استفاده میکند، ممکن است متوجه شوید که یک حساب سرویس مربوطه از قبل در پروژه شما موجود است:
. برای اطلاعات بیشتر، به نمای کلی حسابهای سرویس Firebase مراجعه کنید.
Google Cloud Storage
میتوانید از Google Cloud Storage API برای دسترسی به فایلهای آپلود شده از طریق Firebase SDKs برای Cloud Storage استفاده کنید، بهویژه برای انجام عملیات پیچیدهتر، مانند کپی کردن یا انتقال یک فایل، یا فهرست کردن همه فایلهای موجود در یک مرجع.
توجه به این نکته مهم است که این درخواستها از گزینههای کنترل دسترسی Google Cloud Storage به جای Firebase Authentication و Cloud Storage Security Rules استفاده میکنند.
API ها
علاوه بر SDK های Firebase برای Cloud Storage ، بسته به کاری که می خواهید انجام دهید، روش های دیگری نیز برای دسترسی به داده های ذخیره شده در سطل Cloud Storage شما وجود دارد. اگر به دادهها روی سرور دسترسی دارید، کتابخانههای سمت سرور و همچنین یک API XML
RESTful سازگار با JSON
و S3 را ارائه میدهیم، یا اگر نیاز به تغییرات اسکریپت یا انجام سایر وظایف اداری دارید، یک ابزار خط فرمان داریم که به کار خواهد آمد.
SDK سرور Google Cloud
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) {});
جاوا
// 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()
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');
روبی
# 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 API
اگر از زبانی بدون کتابخانه کلاینت استفاده میکنید، میخواهید کاری را انجام دهید که کتابخانههای سرویس گیرنده انجام نمیدهند، یا فقط یک کلاینت HTTP مورد علاقه دارید که ترجیح میدهید از آن استفاده کنید، Google Cloud Storage API را برای JSON و XML ارائه میکند. .
علاوه بر این APIهای دسترسی به دادههای ذخیرهسازی، برای مدیریت سطلهای Cloud Storage برای استفاده در پروژههای 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 یک سرویس چند مستاجر است، به این معنی که کاربران مجموعهای از منابع اساسی را به اشتراک میگذارند. برای استفاده بهینه از این منابع مشترک، سطل ها دارای ظرفیت IO اولیه هستند.
همانطور که قصد دارید 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 (بتا)
Google Cloud Functions یک راه حل محاسباتی ناهمزمان و سبک وزن مبتنی بر رویداد است که به شما امکان می دهد عملکردهای کوچک و تک منظوره ای ایجاد کنید که بدون نیاز به مدیریت سرور یا محیط زمان اجرا به رویدادها پاسخ می دهند. این توابع را می توان برای رمزگذاری ویدیو، طبقه بندی تصاویر با استفاده از یادگیری ماشینی، یا همگام سازی ابرداده با Firebase Realtime Database استفاده کرد. با سربار حتی کمتر از App Engine ، توابع ابری سریعترین راه برای واکنش به تغییرات در Cloud Storage است.
Google Cloud Vision API
Google Cloud Vision API به توسعه دهندگان این امکان را می دهد که محتوای یک تصویر را با کپسوله کردن مدل های یادگیری ماشین قدرتمند در یک API آسان برای استفاده درک کنند. به سرعت تصاویر را در هزاران دسته طبقه بندی می کند، اشیاء و چهره ها را در تصاویر شناسایی می کند، کلمات چاپ شده موجود در تصاویر را پیدا می کند و می خواند، محتوای توهین آمیز را شناسایی می کند و حتی تجزیه و تحلیل احساسات تصویر را ارائه می دهد.
Google Cloud Speech API
مشابه Vision API، Google Cloud Speech API به توسعه دهندگان این امکان را می دهد که متن را از فایل صوتی ذخیره شده در Cloud Storage استخراج کنند. API بیش از 80 زبان و نوع را تشخیص می دهد تا از پایگاه کاربر جهانی شما پشتیبانی کند. وقتی با Google Cloud Natural Language API ترکیب شود، توسعهدهندگان میتوانند هم متن خام را استخراج کنند و هم معنای آن متن را استنتاج کنند. و اگر مخاطب جهانی مورد نیاز است، این را با Google Translate API همراه کنید تا متن را به بیش از 90 زبان ترجمه کنید.
Google App Engine
Google App Engine یک «پلتفرم بهعنوان سرویس» است که بهطور خودکار منطق پشتیبان را در پاسخ به میزان ترافیکی که دریافت میکند، مقیاس میدهد. فقط کد پشتیبان خود را آپلود کنید و Google در دسترس بودن برنامه شما را مدیریت خواهد کرد. هیچ سروری برای تهیه یا نگهداری شما وجود ندارد. App Engine راهی سریع و ساده برای افزودن قدرت پردازش اضافی یا اجرای قابل اعتماد به برنامه Firebase شما است.
اگر یک سطل Cloud Storage پیش فرض با قالب نام داریدPROJECT_ID .appspot.com
، سپس به طور خودکار با یک برنامه App Engine در پروژه شما به اشتراک گذاشته می شود. این بدان معناست که اگر یک برنامه App Engine میسازید، میتوانید از APIهای App Engine داخلی برای اشتراکگذاری دادهها بین آن سطل و App Engine استفاده کنید. این برای انجام رمزگذاری صدا، رمزگذاری ویدئو، و تبدیل تصویر، و همچنین سایر پردازش های پس زمینه فشرده محاسباتی مفید است.
محیطهای استاندارد Java، Python و Go برای App Engine شامل App Engine Images API ( جاوا | Python | Go ) است که میتواند یک تصویر را تغییر اندازه، بچرخاند، ورق بزند، و یک تصویر را برش دهد، و همچنین URL ارائهدهنده تصویر را برگرداند که این امکان را به شما میدهد. تبدیل سمت مشتری، شبیه به Clodinary و Imgix.
هنگام وارد کردن یک پروژه Google Cloud موجود به Firebase، اگر میخواهید هر شیء App Engine موجود را در Firebase در دسترس قرار دهید، باید کنترل دسترسی پیشفرض را روی اشیاء خود تنظیم کنید تا با اجرای دستور زیر با استفاده از gsutil
به Firebase اجازه دسترسی به آنها را بدهد. :
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 باید یک پروژه Firebase جدید ایجاد کنید. با پشتیبانی تماس بگیرید تا بتوانیم به شما کمک کنیم.