Firebase Storage ile örnek uygulama

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.