Cloud Storage for Firebase به شما امکان میدهد بهسرعت و بهآسانی فایلها را از یک سطل Cloud Storage که توسط Firebase ارائه و مدیریت میشود بارگیری کنید.
ایجاد مرجع
برای بارگیری فایل، ابتدا مرجع Cloud Storage ایجاد کنید تا فایل موردنظرتان بارگیری شود.
میتوانید با افزودن مسیرهای فرزند به ریشه
Cloud Storage bucket، مرجع ایجاد کنید یا میتوانید از نشانی وب موجود
gs:// یا https:// که به شیء در Cloud Storage ارجاع میدهد، مرجع ایجاد کنید.
Kotlin
// Create a storage reference from our app val storageRef = storage.reference // Create a reference with an initial file path and name val pathReference = storageRef.child("images/stars.jpg") // Create a reference to a file from a Google Cloud Storage URI val gsReference = storage.getReferenceFromUrl("gs://bucket/images/stars.jpg") // Create a reference from an HTTPS URL // Note that in the URL, characters are URL escaped! val httpsReference = storage.getReferenceFromUrl( "https://firebasestorage.googleapis.com/b/bucket/o/images%20stars.jpg", )
Java
// Create a storage reference from our app StorageReference storageRef = storage.getReference(); // Create a reference with an initial file path and name StorageReference pathReference = storageRef.child("images/stars.jpg"); // Create a reference to a file from a Google Cloud Storage URI StorageReference gsReference = storage.getReferenceFromUrl("gs://bucket/images/stars.jpg"); // Create a reference from an HTTPS URL // Note that in the URL, characters are URL escaped! StorageReference httpsReference = storage.getReferenceFromUrl("https://firebasestorage.googleapis.com/b/bucket/o/images%20stars.jpg");
بارگیری فایلها
وقتی مرجع را دریافت کردید، میتوانید با فراخوانی getBytes() یا getStream()، فایلها را از Cloud Storage بارگیری کنید. اگر ترجیح میدهید فایل را با کتابخانه دیگری بارگیری کنید، میتوانید نشانی وب بارگیری را با getDownloadUrl() دریافت کنید.
بارگیری در حافظه
فایل را با روش getBytes() در byte[] بارگیری کنید. این
سادهترین راه برای بارگیری فایل است، اما باید کل محتوای
فایل را در حافظه بار کند. اگر فایلی بزرگتر از حافظه دردسترس برنامهتان درخواست کنید،
برنامهتان ازکار خواهد افتاد. برای محافظت دربرابر مشکلات حافظه، getBytes()
حداکثر مقدار بایت را برای بارگیری میگیرد. حداکثر اندازه را روی مقداری تنظیم کنید که میدانید برنامهتان میتواند مدیریت کند، یا از روش بارگیری دیگری استفاده کنید.
Kotlin
var islandRef = storageRef.child("images/island.jpg") val ONE_MEGABYTE: Long = 1024 * 1024 islandRef.getBytes(ONE_MEGABYTE).addOnSuccessListener { // Data for "images/island.jpg" is returned, use this as needed }.addOnFailureListener { // Handle any errors }
Java
StorageReference islandRef = storageRef.child("images/island.jpg"); final long ONE_MEGABYTE = 1024 * 1024; islandRef.getBytes(ONE_MEGABYTE).addOnSuccessListener(new OnSuccessListener<byte[]>() { @Override public void onSuccess(byte[] bytes) { // Data for "images/island.jpg" is returns, use this as needed } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception exception) { // Handle any errors } });
بارگیری در فایل محلی
روش getFile() فایل را مستقیماً در دستگاه محلی بارگیری میکند. اگر کاربران شما میخواهند درحالت آفلاین به فایل دسترسی داشته باشند یا فایل را در برنامه دیگری همرسانی کنند، از این روش استفاده کنید. getFile() یک DownloadTask برمیگرداند که میتوانید از آن برای مدیریت بارگیری و نظارت بر وضعیت بارگیری استفاده کنید.
Kotlin
islandRef = storageRef.child("images/island.jpg") val localFile = File.createTempFile("images", "jpg") islandRef.getFile(localFile).addOnSuccessListener { // Local temp file has been created }.addOnFailureListener { // Handle any errors }
Java
islandRef = storageRef.child("images/island.jpg"); File localFile = File.createTempFile("images", "jpg"); islandRef.getFile(localFile).addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() { @Override public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) { // Local temp file has been created } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception exception) { // Handle any errors } });
اگر میخواهید بارگیریتان را بهطور فعال مدیریت کنید، برای اطلاعات بیشتر به مدیریت بارگیریها مراجعه کنید.
بارگیری دادهها ازطریق نشانی وب
If you already have download infrastructure based around URLs, or just want
a URL to share, you can get the download URL for a file by calling the
getDownloadUrl() method on a Cloud Storage reference.
Kotlin
storageRef.child("users/me/profile.png").downloadUrl.addOnSuccessListener { // Got the download URL for 'users/me/profile.png' }.addOnFailureListener { // Handle any errors }
Java
storageRef.child("users/me/profile.png").getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() { @Override public void onSuccess(Uri uri) { // Got the download URL for 'users/me/profile.png' } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception exception) { // Handle any errors } });
بارگیری تصاویر با FirebaseUI
FirebaseUI اتصالات تلفن همراه بومی ساده، سفارشیسازیشدنی، و آماده تولید ارائه میدهد تا کد متن استاندارد را حذف کند و روالهای مطلوب Google را ترویج دهد. بااستفاده از FirebaseUI میتوانید بهسرعت و بهآسانی تصاویر را از Cloud Storage بارگیری، ذخیره موقت، و نمایش دهید بااستفاده از ادغام ما با Glide.
ابتدا FirebaseUI را به app/build.gradle اضافه کنید:
dependencies { // FirebaseUI Storage only implementation 'com.firebaseui:firebase-ui-storage:9.0.0' }
سپس میتوانید تصاویر را مستقیماً از Cloud Storage در ImageView بار کنید:
Kotlin
// Reference to an image file in Cloud Storage val storageReference = Firebase.storage.reference // ImageView in your Activity val imageView = findViewById<ImageView>(R.id.imageView) // Download directly from StorageReference using Glide // (See MyAppGlideModule for Loader registration) Glide.with(context) .load(storageReference) .into(imageView)
Java
// Reference to an image file in Cloud Storage StorageReference storageReference = FirebaseStorage.getInstance().getReference(); // ImageView in your Activity ImageView imageView = findViewById(R.id.imageView); // Download directly from StorageReference using Glide // (See MyAppGlideModule for Loader registration) Glide.with(context) .load(storageReference) .into(imageView);
مدیریت تغییرات چرخه حیات فعالیت
بارگیریها حتی پساز تغییرات چرخه حیات فعالیت (مانند ارائه کادر گفتگو یا چرخاندن صفحهنمایش) در پسزمینه ادامه مییابند. هر شنوندهای که پیوست کرده بودید نیز پیوستشده باقی خواهد ماند. اگر این روشها پساز توقف فعالیت فراخوانی شوند، ممکن است نتایج غیرمنتظرهای ایجاد کنند.
میتوانید این مشکل را با مشترک کردن شنوندگان خود با یک دامنه فعالیت حل کنید
تا وقتی فعالیت متوقف میشود، بهطور خودکار ثبتنام آنها لغو شود. سپس، وقتی فعالیت دوباره شروع شد، از روش
getActiveDownloadTasks برای دریافت تکالیف بارگیری که هنوز درحال اجرا هستند یا اخیراً تکمیل شدهاند استفاده کنید.
مثال زیر این موضوع را نشان میدهد و همچنین نحوه حفظ مسیر مرجع فضای ذخیرهسازی استفادهشده را نشان میدهد.
Kotlin
override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) // If there's a download in progress, save the reference so you can query it later outState.putString("reference", storageRef.toString()) } override fun onRestoreInstanceState(savedInstanceState: Bundle) { super.onRestoreInstanceState(savedInstanceState) // If there was a download in progress, get its reference and create a new StorageReference val stringRef = savedInstanceState.getString("reference") ?: return storageRef = Firebase.storage.getReferenceFromUrl(stringRef) // Find all DownloadTasks under this StorageReference (in this example, there should be one) val tasks = storageRef.activeDownloadTasks if (tasks.size > 0) { // Get the task monitoring the download val task = tasks[0] // Add new listeners to the task using an Activity scope task.addOnSuccessListener(this) { // Success! // ... } } }
Java
@Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); // If there's a download in progress, save the reference so you can query it later if (mStorageRef != null) { outState.putString("reference", mStorageRef.toString()); } } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); // If there was a download in progress, get its reference and create a new StorageReference final String stringRef = savedInstanceState.getString("reference"); if (stringRef == null) { return; } mStorageRef = FirebaseStorage.getInstance().getReferenceFromUrl(stringRef); // Find all DownloadTasks under this StorageReference (in this example, there should be one) List<FileDownloadTask> tasks = mStorageRef.getActiveDownloadTasks(); if (tasks.size() > 0) { // Get the task monitoring the download FileDownloadTask task = tasks.get(0); // Add new listeners to the task using an Activity scope task.addOnSuccessListener(this, new OnSuccessListener<FileDownloadTask.TaskSnapshot>() { @Override public void onSuccess(FileDownloadTask.TaskSnapshot state) { // Success! // ... } }); } }
مدیریت کردن خطاها
دلایل متعددی برای بروز خطا هنگام بارگیری وجود دارد، ازجمله عدم وجود فایل، یا نداشتن اجازه دسترسی کاربر به فایل موردنظر. اطلاعات بیشتر درباره خطاها را میتوانید در بخش رسیدگی به خطاها در اسناد پیدا کنید.
نمونه کامل
نمونه کاملی از بارگیری با مدیریت خطا در زیر نشان داده شده است:
Kotlin
storageRef.child("users/me/profile.png").getBytes(Long.MAX_VALUE).addOnSuccessListener { // Use the bytes to display the image }.addOnFailureListener { // Handle any errors }
Java
storageRef.child("users/me/profile.png").getBytes(Long.MAX_VALUE).addOnSuccessListener(new OnSuccessListener<byte[]>() { @Override public void onSuccess(byte[] bytes) { // Use the bytes to display the image } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception exception) { // Handle any errors } });
همچنین میتوانید برای فایلهایی که در Cloud Storage ذخیره شدهاند، فراداده دریافت و بهروز کنید.