Merhabalar bu yazımda Firebase Storage hakkında bahsedeceğim.
Firebase Storage cloud tabanlı olup içerisinde fotoğraf ve video gibi birçok dosya türünü depolamaya olanak tanır. Yüksek güvenlikli özelliği yanı sıra dosyaları aktarırken durakladığında kaldığı yerden devam edebilir. Dosya adına, boyuta, içerik türüne ve diğer meta verilere dayalı erişim izni ayarları mevcuttur. Storage tarafındaki verileri Firebase Auth. özelliğiyle birçok türden uygulama yapmak mümkün.
Şimdi adım adım başlayalım. İlk önce Firebase SDK entegresini Android Studio yardımıyla gerçekleştiriyoruz.
Daha sonra storage içerisindeki bir dosyanın path’ini referans şeklinde alarak dosya yükleme, indirme ve silme gibi işlemlere başlayabilirsiniz.
Dosyaların kimler tarafından çekilebileceğini Firebase platformundaki güvenlik kurallarını düzenleyerek projenize entegre edebilirsiniz.
Örnek bir uygulama yapalım. Storage için referans değişkeni oluşturdum.
private StorageReference mStorageRef;
onCreate() metodu içerisinde değişkene değer ataması yaptım.
mStorageRef = FirebaseStorage.getInstance().getReference();
Sonrasında kayıt edeceğim dosyanın ismini kullanarak child oluşturdum ve resim dosyasını imageView değişkenimden alıp Storage’a upload işlemini başlattım.
String image_id = mName + "_" + mEntrance + "_" + currentTime + "_" + date; Bitmap bitmap = ((BitmapDrawable) mImageView.getDrawable()).getBitmap(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); byte[] data = baos.toByteArray(); StorageReference myStorageRef = mStorageRef.child("images/" + image_id + ".jpeg"); UploadTask uploadTask = myStorageRef.putBytes(data); myStorageRef.putBytes(data).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { @Override public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { // if the upload is successfull hide the progress dialog progressDialog.dismiss(); // and display a success toast Toast.makeText(getApplicationContext(), "File uploaded!", Toast.LENGTH_LONG).show(); } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception exception) { // if the upload is not successfull hide the progress dialog progressDialog.dismiss(); // and display an error toast Toast.makeText(getApplicationContext(), exception.getMessage(), Toast.LENGTH_LONG).show(); } }).addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() { @Override public void onProgress(UploadTask.TaskSnapshot taskSnapshot) { //calculating progress percentage double progress = (100.0 * taskSnapshot.getBytesTransferred()) / taskSnapshot.getTotalByteCount(); //displaying percentage in progress dialog progressDialog.setMessage("Uploading " + ((int) progress) + "%..."); } });
Firebase içerisinde images/ şeklinde klasör oluşturuldu, resimleri onun içerisine atıyor. Bu klasörün içeriği şöyle gözükür:
Şimdi de Storage’dan dosya nasıl çekilir onu görelim. Dosya çekerken yine çekmek istediğimiz dosyanın ismini kullanarak referans alıyoruz. Burada ki kod ile bütün resimleri arraylist içerisine yükledim, burdan fragment içerisinde istediğim yerde kullanacağım.
String photoId = image_name + ".jpeg"; StorageReference photoRef = mStorageIns.getReference().child("images/" + photoId); photoRef.getBytes(1024*1024).addOnSuccessListener(new OnSuccessListener<byte[]>() { @Override public void onSuccess(byte[] bytes) { Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); mPhotoArrayList.add(bitmap); mAdapter.notifyDataSetChanged(); } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) {} });
Firebase Storage’dan fotoğrafları çektim ve uygulamamda kullandım. Aşağıda uygulamanın örnek ekran görüntüsü:
Firebase Storage ve Firebase Realtime Database hakkında yazdığım diğer yazılarımı okuyabilirsiniz.