Firebase Storage — Google-ın Firebase ekosisteminə daxil olan, mobil və veb tətbiqlərdən şəkillərin, videoların, audioların və digər ikili məlumatların yüklənməsi və endirilməsi üçün nəzərdə tutulmuş bulud istifadəçi fayl saxlama xidmətidir. Adi bulud diskindən fərqli olaraq, Storage Firebase Authentication və Security Rules ilə inteqrasiya olunur ki, bu da hər bir fayla girişi sorğu səviyyəsində çevik şəkildə məhdudlaşdırmağa imkan verir. Google Firebase (2026) məlumatlarına görə, xidmət gündəlik 500 milyondan çox fayl əməliyyatını emal edir, server infrastrukturunu idarə etmək zörurəti olmadan miqyaslana bilən saxlama təmin edir.
Əsas məqamlar
Firebase Storage — Google Cloud Storage əsasında qurulmuş, Android, iOS və veb platformaları üçün SDK təmin edən bulud obyekt saxlama sistemidir. Hər bir fayl Google Cloud konteynerində obyekt kimi saxlanılır və fayl sisteminə bənzəyən yolla ünvanlanır: gs://bucket-name/path/to/file.jpg. Tək bir faylın ölçüsü 5 TB-ə çata bilər ki, bu da istənilən media məlumatlarını əvvəlcədən sıxışdırmadan saxlamağa imkan verir.
Firebase Storage memarlığı klassik qovluq iyerarxiyası əvƏzinə istinad modeli linklərindən (gsutil references) istifadə edir, baxmayaraq ki, SDK proqramçının rahatlığı üçün kataloqlarla interfeys təmin edir. Fiziki olaraq bütün obyektlər konteynerin düz ad sahəsində saxlanılır, virtual qovluqlar isə yol prefiksləri ilə yaradılır. Bu, faylların sayından asılı olmayaraq xətti axtarış performansını təmin edir.
Firebase Storage-ın Google Cloud Storage-dan birbaşa istifadə ilə müqayisədə əsas üstünlüyü Firebase Authentication və Security Rules ilə daxili inteqrasiyadır. Proqramçı ayrı IAM rolları və xidmət hesabları konfiqurasiya etməlidir: giriş qaydaları Firebase Realtime Database Rules-ə bənzər deklarativ dildə yazılır və hər sorğuda avtomatik tətbiq edilir.
Firebase Storage konteyneri Firebase konsolunda xidməti qoşduqda avtomatik yaradılır. Fayla yol /qovluq_adı/fayl_adı prinsipi əsasında qurulur və iç-içə səviyyələr ehtiva edə bilər. Məlumatları istifadəçilər arasında təcrid etmək üçün yolların /users/{userId}/images/{imageId}.jpg sxemi üzrə təşkil edilməsi tövsiyə olunur. Bu struktur təhlükəsizlik qaydalarının yazılmasını sadələşdirir, çünki yol sahibin identifikatorunu ehtiva edir.
Başa düşmək vacibdir ki, Firebase Storage klassik mənada relyasiyalı verilənlər bazası və ya fayl serveri deyil. Bu, bütöv faylların oxunması və yazılması əməliyyatları üçün optimallaşdırılmış obyekt saxlama sistemidir. Faylın hissəsinin yenilənməsi mümkün deyil: eyni yol altında təkrar yükləmə köhnə obyekti yenisi ilə əvəz edir. Kiçik strukturlaşdırılmış məlumatları saxlamaq üçün Firebase Realtime Database və ya Cloud Firestore istifadə edin.
Firebase Storage qiymətləri saxlanılan məlumatların həcmindən və əməliyyatların sayından asılıdır. Pulsuz tarif (Spark) 5 GB saxlama, gündə 20 000 yazma əməliyyatı və 50 000 oxuma əməliyyatı əhatə edir. Ödənişli tarif (Blaze) faktiki istifadəyə görə ödənilir: saxlanılan məlumatların GB-ı üçün $0,026, 10 000 yazma əməliyyatı üçün $0,05 və 10 000 oxuma əməliyyatı üçün $0,004. Əlavə olaraq çıxış trafikinə görə ödəniş tutulur.
Bir neçə min istifadəçisi olan əksər mobil tətbiqlər üçün pulsuz limit prototipləşdirmə və sınaq mərhələsində kifayətdir. Yüz minlərlə istifadəçiyə miqyaslanarkən, optimallaşdırılmış yükləmə yanaşması və müştəri tərəfində keşləmə ilə Storage xərcləri nadir hallarda ayda $50–$100-ı keçir.
Firebase Storage-a fayl yükləmək müvafiq SDK metodu vasitəsilə həyata keçirilir ki, o da yaddaşda yolu və fayl məlumatlarını (bayt massivi, URI, axın və ya Bitmap) qəbul edir. SDK avtomatik olaraq əlaqəni idarə edir, böyük ölçüdə faylı hissələrə bölür və gedişatı izləmək üçün geri çağırışlar təqdim edir. Yükləmə birbaşa müştəri cihazından Google Cloud-a, sizin serverinizə ehtiyac olmadan həyata keçirilir ki, bu da öz infrastrukturunuzdakı yükü azaldır.
Android üçün Firebase Storage SDK StorageReference və UploadTask siniflərindən istifadə edir. StorageReference Firebase.storage.reference vasitəsilə kök yoldan yaradılır və konteynerdə konkret faylı göstərir. UploadTask gedişat, dayandırma və tamamlama dinləyicilərini qaytarır. Əlaqə qırıldıqda UploadTask avtomatik olaraq son uğurla ötürülən baytdan yükləməni bərpa edir — bu davranış davamlı yükləmə (resumable upload) adlanır.
Fayl metadataları (Content-Type, fərdi sahələr) yükləmə başlanğıcında ayrıca SettableMetadata obyekti kimi ötürülür. Content-Type-ın düzgün qurulması faylların brauzerdə düzgün göstərilməsi və CDN keşləməsinin işləməsi üçün kritik əhəmiyyət kəsb edir. Firebase Storage bütün standart MIME tiplərini dəstəkləyir: image/jpeg, image/png, video/mp4, application/pdf və digərləri.
Fayl metadataları sistem sahələrini (Content-Type, Cache-Control, Content-Disposition) və fərdi açar-dəyər cütlərini (customMetadata) ehtiva edir. Sistem sahələri endirmə zamanı HTTP başlıqlarını idarə edir. Məsələn, Cache-Control: public, max-age=31536000 cavabın bir il müddətinə keşlənməsini aktivləşdirir ki, bu da eyni faylın təkrar yüklənmələrinin sayını əhəmiyyətli dərəcədə azaldır və trafikə qənaət edir.
Fərdi metadatalar Firestore-da ayrıca kolleksiya yaratmadan fayl haqqında əlavə məlumat ötürmək üçün əlverişlidir. Məsələn, uploadedBy sahəsində faylı yükləyən istifadəçinin userId-sini saxlamaq olar ki, bu da müəllif məzmunu olan qalereyaların tətbiqini asanlaşdırır. Fərdi metadatalar Security Rules tərəfindən ayrıca qorunmur — onlara giriş faylın özü ilə eyni qaydalarla tənzimlənir.
Eyni anda çoxsaylı fayl yükləmək zərurəti yarandıqda (məsələn, qalereyadan şəkillər) məhdudiyyətsiz paralel UploadTask-ların işə salınması tövsiyə edilmir. Mobil cihazlarda 3–5 fayldan çox paralel yükləmə şəbəkə yığınının həddindən artıq yüklənməsinə və vaxt aşımına səbəb olur. Optimal strategiya 3 paralellik limiti və ya ümumi gedişat çubuğu göstərilməklə ardıcıl yükləmədir.
Yükləmədən sonra server emalı üçün (thumbnail yaratma, sıxışdırma, məzmun moderasiyası) Firebase Cloud Functions triggerindən istifadə edin: functions.storage.object().onFinalize(). Bu funksiya hər bir faylın yüklənməsi tamamlandıqdan sonra avtomatik çağırılır və emal edilmiş surəti başqa yolda saxlaya bilər. Bu barədə daha ətraflı tipik istifadə ssenariləri bölməsində.
Firebase Storage iki endirmə üsulunu dəstəkləyir: SDK vasitəsilə bayt massivi və ya lokal fayl əldə etməklə birbaşa endirmə və HTTP vasitəsilə giriş üçün birbaşa download URL əldə etmə. Birbaşa URL ImageView-də şəkilləri göstərmək, WebView-də istifadə etmək və ya istifadəçiyə link təqdim etmək üçün istifadə oluna bilər. Download URL Firebase konsolunda ləğv edilə bilən təhlükəsizlik tokeni ilə yaradılır.
storageReference.downloadUrl metodu https://firebasestorage.googleapis.com/v0/b/{bucket}/o/{path}?alt=media&token={token} formatında URL qaytarır. Təhlükəsizlik tokeni yaradılma zamanı avtomatik olaraq URL-ə daxil edilir, buna görə də linki icazəsiz giriş riski olmadan üçüncü tərəflərə ötürmək olar (məsələn, mesajlaşma proqramında). Ancaq token kompromizə olunarsa, onu Firebase konsolunda Storage bölməsində ləğv etmək olar — bundan sonra bu tokenlə bütün linklər işləməyi dayandıracaq.
Müştəri tərəfində endirilmiş faylların keşlənməsi üçün lokal yaddaş və ETag və ya MD5-həş mexanizmindən istifadə edin. Firebase Storage fayl sorğusunda HTTP ETag başlığını qaytarır ki, onu lokal saxlanılan dəyərlə müqayisə etmək və dəyişməmiş faylların təkrar endirilməsinin qarşısını almaq olar. Bu, xüsusilə media məzmunu üçün faydalıdır: avatarlar, üz qabıqları, ön izləmələr — nadir hallarda yenilənən, lakin tez-tez tələb olunan fayllar.
Download URL tokenlə autentifikasiya olunmamış istifadəçilərə fayllara giriş təmin etməyin əsas üsuludur (məsələn, xəbər lentində şəklin göstərilməsi üçün). Token bir dəfə yaradılır və ləğv edilənə qədər dəyişmir, buna görə də URL verilənlər bazasında saxlana bilər (məsələn, Firestore-da avatarUrl sahəsinin yanında). Avatar dəyişdirilərkən köhnə fayl silinir, yeni URL yaradılır və saxlanılır.
Xatırlamaq vacibdir: download URL-in olması Security Rules-u ləğv etmir. Əgər qayda faylın oxunmasını qadağan edirsə, downloadUrl metodu Permission Denied xətası qaytaracaq. Bu o deməkdir ki, faylın düzgün yolunu bilsə belə, autentifikasiya olunmamış müştəri linki əldə edə bilməyəcək. URL əldə edildikdən sonra fayla giriş Security Rules-dan yan keçərək HTTP vasitəsilə həyata keçirilir — buna görə də token download linkinin yeganə qorunmasıdır.
HTTP ETag — məzmunun hər dəyişməsində dəyişən fayl versiyasının identifikatorudur. Firebase Storage GET sorğusuna cavabda avtomatik olaraq ETag qaytarır. Müştəri tətbiqi ETag-i lokal keşdə saxlaya və təkrar sorğuda If-None-Match: {etag} başlığını göndərə bilər. Əgər fayl dəyişməyibsə, server məlumat ötürülmədən 304 Not Modified statusunu qaytaracaq.
Mobil tətbiqdə intellektual keşləmə tətbiqi üçün lokal fayl sistemi və verilənlər bazasının kombinasiyasından istifadə edin (məsələn, yol-ETag cütlərini saxlamaq üçün Room). Faylı endirərkən verilənlər bazasından ETag-i yoxlayın: əgər serverdəki ilə uyğun gəlirsə, lokal surətdən istifadə edin. Bu yanaşma statik media faylları üçün trafiki 60–80% azaldır və qalereyaları olan ekranların yüklənməsini sürətləndirir.
Security Rules — Firebase server tərəfində icra edilən, Firebase Storage-də fayllara girişi məhdudlaşdırmaq üçün deklarativ dildir. Hər bir qayda konteynerdəki yola bağlanır və oxuma (read) və ya yazma (write) əməliyyatına icazə verilən şərtləri müəyyən edir. Qaydalar hər sorğudan əvvəl yoxlanılır və müştəri kodu tərəfindən yan keçilə bilməz. Bu, məlumatların icazəsiz girişdən qorunmasının yeganə xəttidir.
Əsas qayda — yalnız autentifikasiya olunmuş istifadəçilər üçün giriş: allow read, write: if request.auth != null. Belə bir qayda yalnız sistemə daxil olmuş istifadəçilərin faylları oxuya və yaza bilməsini təmin edir. Daha incə konfiqurasiya üçün cari istifadəçinin identifikatorunu ehtiva edən request.auth.uid dəyişənindən istifadə olunur. uid-i fayl yolunun hissəsi ilə müqayisə edərək, hər bir istifadəçi üçün təcrid olunmuş saxlama yarada bilərsiniz.
Vacib: Security Rules məzmunun validasiyası mexanizmi deyil. Faylın növünü, ölçüsünü və ya zərərli kodun mövcudluğunu yoxlamaq lazımdırsa, yüklənən faylın metadatalarını ehtiva edən request.resource qaydasından istifadə edin. request.resource.size (fayl ölçüsü), request.resource.contentType (MIME növü) və request.resource.md5Hash (nəzarət cəmi) xassələri mövcuddur. Lakin məzmunun tam yoxlanılması Cloud Functions vasitəsilə server tərəfində həyata keçirilir.
| Ssenari | Security Rules qaydası |
|---|---|
| Yalnız autentifikasiya olunmuş | allow read, write: if request.auth != null |
| Yalnız sahib | allow write: if request.auth.uid == userId |
| İctimai oxuma | allow read: if true; allow write: if request.auth != null |
| Ölçü məhdudiyyəti | allow write: if request.resource.size < 5 * 1024 * 1024 |
| Növ məhdudiyyəti | allow write: if request.resource.contentType.startsWith('image/') |
İstifadəçi avatarları və qalereyası olan tipik konfiqurasiya aşağıdakı kimidir. İstifadəçi yalnız öz kataloqunda /users/{userId}/ yaza bilər, lakin bu kataloqda istənilən faylı oxuya bilər (ictimai qalereya). Fayl ölçüsü 5 MB ilə məhdudlaşdırılıb, növ isə yalnız şəkillərdir. Qaydaların bu kombinasiyası sosial və UGC tətbiqlərində Firebase Storage istifadə ssenarilərinin 80%-ni əhatə edir.
Təhlükəsizlik məsləhəti: bütün konteyner üçün heç vaxt allow read, write: if true qaydasından istifadə etməyin. Bu, sizin projectId-nizi bilən hər kəsə yazma girişi açır. 2025-ci ildə qorunmayan Firebase konteynerlərinə hücumlar artdı, təcavüzkarlar qeyri-qanuni məzmun saxlamaq üçün açıq girişdən istifadə etdilər. Həmişə minimum tələb olunan icazələrlə başlayın və yalnız aşkar zərurət olduqda genişləndirin.
Cloud Functions triggeri functions.storage.object().onFinalize() yükləmədən sonra məzmunun yoxlanılmasına imkan verir. Əgər fayl validasiyadan keçmirsə (məsələn, virus ehtiva edir və ya platforma qaydalarını pozur), funksiya onu silə və istifadəçiyə məlumat verə bilər. Bu, faktiki məzmunun yoxlanılmasının yeganə üsuludur, çünki Security Rules yalnız metadataları (ölçü və MIME növü) görür, ikili məlumatları yox.
Validasiya nümunəsi: Node.js-də funksiya yüklənmiş faylı müvəqqəti kataloqa endirir, onu antivirus detektorundan (məsələn, ClamAV) keçirir və təhlükə aşkar edilərsə — faylı silir və hadisəni Firebase Crashlytics-ə yazır. Funksiyanın icra müddəti 540 saniyə ilə məhdudlaşdırılıb ki, bu da 50 MB-a qədər faylların yoxlanılması üçün kifayətdir.
Android tətbiqində Firebase Storage inteqrasiyasının praktik nümunələrini nəzərdən keçirək. Kod Firebase SDK-nın standart siniflərindən istifadə edir və cihazın qalereyasından şəklin yüklənməsini, gedişatı izləməklə faylın endirilməsini və download URL-in əldə edilməsini nümayiş etdirir. Bütün nümunələr səhvlərin idarə edilməsi və əlaqə itkisi zamanı tapşırıqların dayandırılması nəzərə alınmaqla hazırlanıb.
Koddan istifadə etməzdən əvvəl build.gradle faylında implementation(platform("com.google.firebase:firebase-bom:33.0.0")) və implementation("com.google.firebase:firebase-storage") asılılıqlarının əlavə edildiyinə əmin olun. Firebase BOM bütün SDK-ların uyğun versiyalarını avtomatik seçir ki, bu da versiya konfliktlərini aradan qaldırır.
Birinci nümunə — Intent ACTION_GET_CONTENT vasitəsilə istifadəçi tərəfindən seçilmiş faylın yüklənməsi. Alınan faylın URI-i Firebase Storage SDK-ya ötürülür, o da bu URI-dən məlumatları müstəqil oxuyur. putFile metodu URI qəbul edir və UploadTask — gedişatı izləmək, dayandırmaq və bərpa etmək mümkün olan obyekti qaytarır.
val storageRef = Firebase.storage.reference
val imageRef = storageRef.child(
"users/${auth.uid}/profile.jpg"
)
val metadata = SettableMetadata().apply {
contentType = "image/jpeg"
customMetadata = mapOf(
"uploadedBy" to auth.uid!!
)
}
imageRef.putFile(imageUri, metadata)
.addOnSuccessListener {
Log.d("Storage", "Fayl yükləndi")
}
.addOnFailureListener { e ->
Log.e("Storage", "Xəta: ${e.message}")
}
Yuxarıdakı nümunədə storageRef dəyişəni layihə konteynerinə kök istinaddır. Metod child yol sətirini qəbul edir və konkret faylı göstərən StorageReference qaytarır. Əgər göstərilən yolda fayl artıq mövcuddursa, o, üzərinə yazılacaq. contentType və customMetadata metadataları putFile sorğusuna əlavə edilən SettableMetadata obyekti vasitəsilə ötürülür.
İkinci nümunə ImageView-də göstərmək üçün bayt massivi əldə etməklə faylın endirilməsini nümayiş etdirir. getBytes(<maxSize>) metodu bütün faylı yaddaşa yükləyir. 10 MB-dan böyük fayllar üçün getFile(<localUri>) istifadə edin — o, məzmunu birbaşa lokal fayla yazır, operativ yaddaşda saxlamır ki, bu da OutOfMemoryError-un qarşısını alır.
val islandRef = storageRef.child("images/island.jpg")
val ONE_MEGABYTE: Long = 1024 * 1024
islandRef.getBytes(ONE_MEGABYTE)
.addOnSuccessListener { bytes ->
imageView.setImageBitmap(
BitmapFactory.decodeByteArray(
bytes, 0, bytes.size
)
)
}
.addOnFailureListener { e ->
Log.e("Storage", "Yüklənmədi: ${e.message}")
}
Download URL əldə etmək üçün (məsələn, linki Firestore-da saxlamaq üçün) downloadUrl metodundan istifadə olunur:
islandRef.downloadUrl.addOnSuccessListener { uri ->
Log.d("Storage", "Download URL: $uri")
// uri.toString()-i Firestore-da saxla
}
Məsləhət: downloadUrl bir dəfə yaradılır və ləğv edilənə qədər sabitdir. Onu ilk yükləmədə verilənlər bazasında saxlayın, faylı hər göstərmək istədikdə təkrar tələb etməyin. Bu, Firebase Storage-a sorğuların sayını azaldır və UI-nin işini sürətləndirir.
Firebase Storage mobil tətbiqlərdə istənilən istifadəçi və sistem fayllarını saxlamaq üçün istifadə olunur. Ən çox yayılmış ssenarilər — avatarlar və profil şəkilləri, məzmun lentindəki şəkillər, video və audio fayllar, istifadəçilər arasında mübadilə üçün sənədlər (PDF, DOCX), həmçinin kiçik həcmli məlumatların ehtiyat nüsxəsidir. Bütün bu hallarda Storage metadataları və linkləri saxlamaq üçün Firestore ilə birlikdə ixtisaslaşmış fayl anbarı kimi çıxış edir.
Sosial tətbiqlər — ən çox yayılmış istifadə halı. Hər bir istifadəçi avatar, post şəkilləri və media faylları yükləyir. /users/{uid}/posts/{postId}/image.jpg yollarının strukturu məlumatları təcrid etməyə və Security Rules-u sadələşdirməyə imkan verir. İstifadəçi silinərkən Cloud Function istifadəçinin bütün kataloqlarını gəzərək anbarı təmizləyə bilər. Firebase bloguna (2025) görə, bu nümunə Firebase-də istehsal layihələrinin 70%-də istifadə olunur.
E-commerce tətbiqləri Firebase Storage-dan məhsul şəkillərini, kataloqları və təlimatları olan PDF fayllarını saxlamaq üçün istifadə edir. Bu halda fayllara giriş adətən ictimai (autentifikasiyasız oxuma), yazma isə yalnız Cloud Functions vasitəsilə hüquq yoxlanması ilə administratorlar üçündür. Məhsulların download URL-i Firestore-da məhsulun digər məlumatları ilə birlikdə saxlanılır ki, bu da Storage-a əlavə sorğular olmadan şəkilləri göstərməyə imkan verir.
Mesajlaşma proqramları və çatlar Firebase Storage-da dialoqlarda göndərilən şəkilləri və səs mesajlarını saxlayır. Yol /chats/{chatId}/messages/{messageId}.jpg kimi qurulur. Oxuma girişi — yalnız çat iştirakçıları üçün, bu, Firestore-dan məlumatlardan istifadə edərək Security Rules vasitəsilə yoxlanılır. Bu, qaydanın başqa Firebase xidmətindən məlumat oxuduğu nadir ssenarilərdən biridir: allow read: if firestore.exists(/databases/(default)/documents/chats/{chatId}/members/{request.auth.uid}).
Tez-tez verilən suallar
Firebase Storage — Firebase Authentication və Security Rules ilə inteqrasiya edilmiş Google Cloud Storage üzərində əlavədir. Proqramçı IAM rolları və xidmət hesabları konfiqurasiya etməlidir. Google Cloud Storage daha geniş imkanlar (Pub/Sub bildirişləri, Object Lifecycle Management) təqdim edir, lakin GCP IAM vasitəsilə əl ilə giriş idarəçiliyi tələb edir.
Ölçü məhdudiyyəti Security Rules-da request.resource.size vasitəsilə təyin edilir. Nümunə: allow write: if request.resource.size <= 5 * 1024 * 1024 faylları 5 MB ilə məhdudlaşdırır. Əlavə olaraq, açıq-aydın icazə verilməyən faylı göndərməzdən əvvəl müştəri tərəfində yoxlamaq olar ki, istifadəçinin trafikini sərf etməsin.
Bəli, silmək üçün StorageReference obyektinin delete() metodu istifadə olunur: storageRef.child("path").delete(). Silmə əməliyyatı geri qaytarılmazdır və faylı dərhal konteynerdən silir. Faylı yalnız Security Rules bu yol üçün write-a icazə verdikdə silmək olar. Silmədən sonra download URL işləməyi dayandırır.
Security Rules-da hamı (və ya autentifikasiya olunmuş) üçün read-ə icazə verin və write-ı qadağan edin: allow read: if request.auth != null; allow write: if false. Bu rejimdə yazma yalnız Firebase Admin SDK xidmət hesabı vasitəsilə mümkündür — məsələn, inzibati hüquqları olan Cloud Functions-dan. Bu, məhsul kataloqları və ictimai məzmun üçün standart nümunədir.
UploadTask seqmentasiya ilə HTTP PUT əsasında resumable upload protokolundan istifadə edir. Qısilma zamanı yükləmə son təsdiqlənmiş baytdan bərpa olunur, yenidən başlamır. Bu davranışı aktivləşdirmək üçün əlavə parametrlər tələb olunmur — SDK fayl ölçüsü 1 MB-dan çox olduqda bunu avtomatik edir.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun