A Firebase Storage egy felhőalapú szolgáltatás felhasználói fájlok tárolására, a Google Firebase ökoszisztémájának része, amely képek, videók, audió és más bináris adatok feltöltésére és letöltésére szolgál mobil- és webalkalmazásokból. Ellentétben a hagyományos felhőlemezzel, a Storage integrálódik a Firebase Authentication és Security Rules szolgáltatásokkal, ami lehetővé teszi az egyes fájlokhoz való hozzáférés rugalmas szabályozását kérési szinten. A Google Firebase (2026) adatai szerint a szolgáltatás naponta több mint 500 millió fájlműveletet dolgoz fel, skálázható tárolást biztosítva anélkül, hogy szerverinfrastruktúrát kellene kezelni.
Főbb pontok
A Firebase Storage egy felhőalapú objektumtároló, amely a Google Cloud Storage-ra épül, és SDK-t biztosít Android, iOS és web platformokhoz. Minden fájl objektumként tárolódik egy Google Cloud bucketben, és egy fájlrendszerre emlékeztető útvonalon címezhető: gs://bucket-name/path/to/file.jpg. Egy fájl mérete elérheti az 5 TB-ot, ami lehetővé teszi bármilyen médiaadat előzetes tömörítés nélküli tárolását.
A Firebase Storage architektúrája hivatkozási modellt (gsutil references) használ a klasszikus mappahierarchia helyett, bár az SDK a fejlesztő kényelme érdekében könyvtárakkal ellátott interfészt biztosít. Fizikailag minden objektum a bucket lapos névterében tárolódik, és a virtuális mappák elérési út előtagok segítségével jönnek létre. Ez lineáris keresési teljesítményt biztosít a fájlok számától függetlenül.
A Firebase Storage fő előnye a Google Cloud Storage közvetlen használatával szemben a beépített integráció a Firebase Authentication és Security Rules szolgáltatásokkal. A fejlesztőnek nem kell külön IAM-szerepköröket és szolgáltatásfiókokat beállítania: a hozzáférési szabályok a Firebase Realtime Database Rules-hoz hasonló deklaratív nyelven íródnak, és automatikusan alkalmazódnak minden kérésnél.
A Firebase Storage bucket automatikusan létrejön a szolgáltatás Firebase konzolban történő aktiválásakor. A fájl elérési útja a /mappa_neve/fájl_neve elv szerint épül fel, és tartalmazhat beágyazott szinteket. Javasolt az elérési utakat a /users/{userId}/images/{imageId}.jpg séma szerint szervezni az adatok felhasználók közötti elkülönítéséhez. Az ilyen szerkezet egyszerűsíti a biztonsági szabályok írását, mivel az elérési út tartalmazza a tulajdonos azonosítóját.
Fontos megérteni, hogy a Firebase Storage nem relációs adatbázis vagy fájlszerver a klasszikus értelemben. Ez egy objektumtároló, amely teljes fájlok olvasási és írási műveleteire optimalizált. Egy fájl részének frissítése nem lehetséges: azonos elérési úton történő ismételt feltöltéskor a régi objektum lecserélődik az újra. Kis strukturált adatok tárolásához használja a Firebase Realtime Database vagy a Cloud Firestore szolgáltatást.
A Firebase Storage árazása a tárolt adatok mennyiségétől és a műveletek számától függ. Az ingyenes csomag (Spark) 5 GB tárhelyet, 20 000 írási műveletet és 50 000 olvasási műveletet tartalmaz naponta. A fizetős csomag (Blaze) a tényleges használat alapján fizetendő: $0,026 GB-onként tárolt adatra, $0,05 10 000 írási műveletenként és $0,004 10 000 olvasási műveletenként. További díjat számítanak fel a kimenő forgalomért.
A legtöbb mobilalkalmazás számára néhány ezer felhasználóval az ingyenes korlát elegendő a prototípus- és tesztelési szakaszban. Több százezer felhasználóra történő skálázáskor a Storage költségei ritkán haladják meg a havi $50–$100 összeget optimalizált feltöltési és kliens oldali gyorsítótárazási megközelítéssel.
Fájl feltöltése a Firebase Storage-ba a megfelelő SDK metóduson keresztül történik, amely elfogadja a tárolóban lévő elérési utat és a fájl adatait (bájttömb, URI, adatfolyam vagy Bitmap). Az SDK automatikusan kezeli a kapcsolatot, nagy méret esetén szegmensekre bontja a fájlt, és visszahívásokat biztosít a haladás nyomon követéséhez. A feltöltés közvetlenül a klienseszközről történik a Google Cloud felé, megkerülve a saját szervert, ami csökkenti a saját infrastruktúra terhelését.
Androidon a Firebase Storage SDK a StorageReference és UploadTask osztályokat használja. A StorageReference a gyökérútvonalból jön létre a Firebase.storage.reference segítségével, és egy adott fájlra mutat a bucketben. Az UploadTask figyelőket ad vissza a haladáshoz, szüneteltetéshez és befejezéshez. Kapcsolat megszakadásakor az UploadTask automatikusan folytatja a feltöltést az utolsó sikeresen elküldött bájttól — ezt a viselkedést folytatható feltöltésnek (resumable upload) nevezzük.
A fájl metaadatai (Content-Type, egyéni mezők) egy külön SettableMetadata objektumon keresztül kerülnek továbbításra a feltöltés indításakor. A Content-Type helyes beállítása kritikus fontosságú a fájlok böngészőben történő helyes megjelenítéséhez és a CDN-gyorsítótárazás működéséhez. A Firebase Storage támogatja az összes szabványos MIME-típust: image/jpeg, image/png, video/mp4, application/pdf és másokat.
A fájl metaadatai rendszermezőket (Content-Type, Cache-Control, Content-Disposition) és egyéni kulcs-érték párokat (customMetadata) tartalmaznak. A rendszermezők a HTTP-fejléceket vezérlik letöltéskor. Például a Cache-Control: public, max-age=31536000 bekapcsolja a válasz egy évig tartó gyorsítótárazását, ami jelentősen csökkenti ugyanazon fájl ismételt letöltéseinek számát és forgalmat takarít meg.
Az egyéni metaadatok kényelmesek további információ átvitelére a fájlról anélkül, hogy külön gyűjteményt kellene létrehozni a Firestore-ban. Például az uploadedBy mezőben eltárolhatja a feltöltő felhasználó userId-ját, ami egyszerűsíti a szerzői tartalommal rendelkező galériák megvalósítását. Az egyéni metaadatokat a Security Rules nem védi külön — a hozzájuk való hozzáférést ugyanazok a szabályok szabályozzák, mint magát a fájlt.
Amikor több fájlt kell feltölteni egyszerre (például galériából származó fényképeket), nem ajánlott korlátozás nélkül párhuzamosan független UploadTask-okat indítani. Mobileszközökön a 3–5 fájlnál több párhuzamos feltöltése a hálózati verem túlterheléséhez és időtúllépésekhez vezet. Az optimális stratégia a 3-as konkurenciakorlát használata vagy a szekvenciális feltöltés általános haladásjelző sávval.
Szerveroldali feldolgozáshoz feltöltés után (miniatűrök létrehozása, tömörítés, tartalom moderálása) használja a Firebase Cloud Functions triggert: functions.storage.object().onFinalize(). Ez a függvény automatikusan meghívódik minden fájl feltöltésének befejezése után, és elmentheti a feldolgozott másolatot egy másik elérési útra. Erről bővebben a tipikus használati esetekről szóló részben.
A Firebase Storage két letöltési módot támogat: közvetlen letöltés SDK-n keresztül bájttömb vagy helyi fájl megszerzésével, és közvetlen download URL beszerzése HTTP-n keresztüli eléréshez. A közvetlen URL használható képek ImageView-ban, WebView-ban történő megjelenítésére vagy hivatkozás biztosítására a felhasználónak. A download URL biztonsági tokenrel generálódik, amely visszavonható a Firebase konzolban.
A storageReference.downloadUrl metódus a következő formátumú URL-t ad vissza: https://firebasestorage.googleapis.com/v0/b/{bucket}/o/{path}?alt=media&token={token}. A biztonsági token automatikusan bekerül az URL-be a generáláskor, így a hivatkozás harmadik feleknek is átadható (például üzenetküldőben) anélkül, hogy illetéktelen hozzáférés kockázata állna fenn. Ha azonban a token kompromittálódott, visszavonható a Firebase konzol Storage szakaszában — ezt követően az összes ilyen tokenű hivatkozás működésképtelenné válik.
A letöltött fájlok gyorsítótárazásához a kliensen használjon helyi tárolót és ETag vagy MD5 hash mechanizmust. A Firebase Storage HTTP ETag fejlécet ad vissza a fájl kérésekor, amely összehasonlítható egy helyileg tárolt értékkel a változatlan fájlok ismételt letöltésének elkerülése érdekében. Ez különösen hasznos médiatartalom esetén: avatárok, borítók, előnézetek — ritkán frissülő, de gyakran kért fájlok.
A download URL tokennal az elsődleges módja a fájlokhoz való hozzáférés biztosításának nem hitelesített felhasználók számára (például kép megjelenítése hírfolyamban). A token egyszer jön létre, és nem változik a visszavonásig, így az URL elmenthető az adatbázisba (például a Firestore avatarUrl mezője mellé). Az avatar cseréjekor a régi fájl törlődik, és az új URL generálódik és tárolódik.
Fontos megjegyezni: a download URL megléte nem helyezi hatályon kívül a Security Rules szabályokat. Ha egy szabály tiltja a fájl olvasását, a downloadUrl metódus Permission Denied hibát ad vissza. Ez azt jelenti, hogy még a fájl helyes elérési útjának ismeretében sem kaphat hivatkozást a nem hitelesített kliens. Az URL megszerzése után a fájlhoz való hozzáférés HTTP-n keresztül történik, megkerülve a Security Rules szabályokat — ezért a token az egyetlen védelme a download hivatkozásnak.
Az HTTP ETag a fájl verziójának azonosítója, amely minden tartalomváltozáskor módosul. A Firebase Storage automatikusan visszaadja az ETag-ot a GET kérésre adott válaszban. A kliensalkalmazás elmentheti az ETag-ot a helyi gyorsítótárba, és ismételt kéréskor elküldheti az If-None-Match: {etag} fejlécet. Ha a fájl nem változott, a szerver 304 Not Modified státuszt ad vissza adatátvitel nélkül.
Intelligens gyorsítótárazás megvalósításához mobilalkalmazásban használja a helyi fájlrendszer és egy adatbázis (például Room az elérési út-ETag párok tárolásához) kombinációját. Fájl letöltésekor ellenőrizze az ETag-ot az adatbázisból: ha megegyezik a szerverivel, használja a helyi másolatot. Ez a megközelítés 60–80%-kal csökkenti a forgalmat statikus médiafájlok esetén, és felgyorsítja a galériákat tartalmazó képernyők betöltését.
A Security Rules egy deklaratív nyelv a Firebase Storage-ban lévő fájlokhoz való hozzáférés szabályozására, amely a Firebase szerveroldalán fut. Minden szabály egy adott elérési úthoz kapcsolódik a bucketben, és meghatározza azokat a feltételeket, amelyek mellett az olvasási (read) vagy írási (write) művelet engedélyezett. A szabályok minden kérés előtt ellenőrzésre kerülnek, és nem kerülhetők meg kliens kóddal. Ez az adatok egyetlen védelmi vonala az illetéktelen hozzáféréssel szemben.
Az alapszabály — hozzáférés csak hitelesített felhasználóknak: allow read, write: if request.auth != null. Egy ilyen szabály garantálja, hogy csak bejelentkezett felhasználók olvashatnak és írhatnak fájlokat. Finomabb beállításhoz a request.auth.uid változó használható, amely az aktuális felhasználó azonosítóját tartalmazza. Az uid összehasonlításával a fájl elérési útjának egy részével elkülönített tároló hozható létre minden felhasználó számára.
Fontos: A Security Rules nem tartalomérvényesítő mechanizmus. Ha ellenőrizni kell a fájltípust, méretét vagy rosszindulatú kód jelenlétét, használja a request.resource szabályt, amely a feltöltött fájl metaadatait tartalmazza. Elérhető tulajdonságok: request.resource.size (fájlméret), request.resource.contentType (MIME-típus) és request.resource.md5Hash (ellenőrző összeg). A teljes tartalomellenőrzés azonban szerveroldalon történik a Cloud Functions segítségével.
| Forgatókönyv | Security Rules szabály |
|---|---|
| Csak hitelesítettek | allow read, write: if request.auth != null |
| Csak tulajdonos | allow write: if request.auth.uid == userId |
| Nyilvános olvasás | allow read: if true; allow write: if request.auth != null |
| Méretkorlátozás | allow write: if request.resource.size < 5 * 1024 * 1024 |
| Típusszűrés | allow write: if request.resource.contentType.startsWith('image/') |
Tipikus konfiguráció felhasználói avatárokkal és galériával rendelkező alkalmazásokhoz a következőképpen néz ki. A felhasználó csak a saját /users/{userId}/ könyvtárába írhat, de olvashat bármely fájlt abban a könyvtárban (a galéria nyilvános). A fájlméret 5 MB-ra korlátozott, a típus pedig csak kép. A szabályok ilyen kombinációja a Firebase Storage használati eseteinek 80%-át lefedi a közösségi és UGC alkalmazásokban.
Biztonsági tipp: soha ne használja a allow read, write: if true szabályt a teljes bucketre. Ez írási hozzáférést biztosít bárkinek, aki ismeri a projectId-ját. 2025-ben megnövekedtek a védtelen Firebase buckettek elleni támadások, amikor a támadók nyílt hozzáférést használtak illegális tartalom tárolására. Mindig a minimálisan szükséges jogosultságokkal kezdje, és csak kifejezett szükség esetén bővítse azokat.
A Cloud Functions functions.storage.object().onFinalize() triggere lehetővé teszi a tartalom ellenőrzését feltöltés után. Ha a fájl nem megy át az érvényesítésen (például vírust tartalmaz vagy megsérti a platform szabályait), a függvény törölheti azt és értesítheti a felhasználót. Ez az egyetlen módja a tényleges tartalom ellenőrzésének, mivel a Security Rules csak a metaadatokat (méret és MIME-típus) látja, nem a bináris adatokat.
Érvényesítési példa: a Node.js függvény letölti a feltöltött fájlt egy ideiglenes könyvtárba, átfuttatja egy vírusérzékelőn (például ClamAV), és ha fenyegetést talál — törli a fájlt és bejegyzést ír a Firebase Crashlytics-be. A függvény végrehajtási ideje 540 másodpercre korlátozott, ami elegendő az 50 MB-ig terjedő fájlok ellenőrzéséhez.
Nézzünk gyakorlati példákat a Firebase Storage integrációjára Android-alkalmazásban Kotlinban. A kód a Firebase SDK szabványos osztályait használja, és bemutatja a kép feltöltését az eszköz galériájából, a fájl letöltését haladás követéssel és a download URL megszerzését. Minden példa hiba kezeléssel és a feladatok szüneteltetésével készült kapcsolat elvesztése esetén.
A kód használata előtt győződjön meg arról, hogy a build.gradle fájlban hozzáadásra került a implementation(platform("com.google.firebase:firebase-bom:33.0.0")) és implementation("com.google.firebase:firebase-storage") függőség. A Firebase BOM automatikusan kiválasztja az összes SDK kompatibilis verzióját, ami kiküszöböli a verzióütközéseket.
Az első példa — fájl feltöltése, amelyet a felhasználó az Intent ACTION_GET_CONTENT segítségével választott ki. A kapott fájl URI-je átadásra kerül a Firebase Storage SDK-nak, amely önállóan beolvassa az adatokat arról az URI-ről. A putFile metódus elfogad egy URI-t, és visszaad egy UploadTask-ot — egy objektumot, amelyen keresztül követhető a haladás, szüneteltethető és folytatható a feltöltés.
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", "Fájl feltöltve")
}
.addOnFailureListener { e ->
Log.e("Storage", "Hiba: ${e.message}")
}
A fenti példában a storageRef változó a projekt bucket gyökércímkéje. A child metódus elfogad egy elérési út sztringet, és visszaad egy StorageReference-t, amely egy adott fájlra mutat. Ha a fájl a megadott elérési úton már létezik, felülíródik. A contentType és customMetadata metaadatok egy SettableMetadata objektumon keresztül kerülnek továbbításra, amely a putFile kéréshez csatolódik.
A második példa bemutatja a fájl letöltését bájttömb megszerzésével ImageView-ban történő megjelenítéshez. A getBytes(
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", "Nem sikerült feltölteni: ${e.message}")
}
Download URL megszerzéséhez (például a hivatkozás Firestore-ba mentéséhez) a downloadUrl metódus használható:
islandRef.downloadUrl.addOnSuccessListener { uri ->
Log.d("Storage", "Download URL: $uri")
// uri.toString() mentése a Firestore-ba
}
Tipp: a downloadUrl egyszer jön létre, és stabil marad a visszavonásig. Mentse el az adatbázisba az első feltöltéskor, ne kérje le minden alkalommal a fájl megjelenítésekor. Ez csökkenti a Firebase Storage felé irányuló kérések számát és felgyorsítja a UI működését.
A Firebase Storage mobilalkalmazásokban használatos minden felhasználói és rendszerfájl tárolására. A leggyakoribb esetek: avatárok és profilképek, képek tartalmi hírfolyamban, video- és audiófájlok, dokumentumok (PDF, DOCX) felhasználók közötti megosztáshoz, valamint kis mennyiségű adat biztonsági mentése. Mindezekben az esetekben a Storage speciális fájltárolóként működik a Firestore-ral együtt a metaadatok és hivatkozások tárolásához.
Közösségi alkalmazások — a leggyakoribb eset. Minden felhasználó feltölt avatart, bejegyzésfotókat és médiafájlokat. A /users/{uid}/posts/{postId}/image.jpg elérési útvonal szerkezet lehetővé teszi az adatok elkülönítését és egyszerűsíti a Security Rules szabályokat. Felhasználó törlésekor a Cloud Function végigmehet a felhasználó összes könyvtárán és kitakaríthatja a tárolót. A Firebase blog (2025) szerint ez a minta a Firebase-en futó 70%-os production projektekben használatos.
E-commerce alkalmazások a Firebase Storage-t használják termékfotók, katalógusok és PDF-utasítások tárolására. Ebben az esetben a fájlokhoz való hozzáférés általában nyilvános (olvasás hitelesítés nélkül), az írás pedig csak adminisztrátorok számára engedélyezett Cloud Functions segítségével jogosultság-ellenőrzéssel. A termékek download URL-je a Firestore-ban tárolódik a többi termékadat mellett, lehetővé téve a képek megjelenítését további Storage-kérések nélkül.
Üzenetküldők és chatek a Firebase Storage-ban tárolják a párbeszédekben elküldött képeket és hangüzeneteket. Az elérési út a /chats/{chatId}/messages/{messageId}.jpg formátumban épül fel. Olvasási hozzáférés — csak a csevegés résztvevőinek, ami a Security Rules segítségével ellenőrizhető a Firestore adatainak használatával. Ez azon kevés forgatókönyvek egyike, ahol a szabály adatokat olvas egy másik Firebase-szolgáltatásból: allow read: if firestore.exists(/databases/(default)/documents/chats/{chatId}/members/{request.auth.uid}).
Gyakran Ismételt Kérdések
A Firebase Storage egy réteg a Google Cloud Storage felett, Firebase Authentication és Security Rules integrációval. A fejlesztőnek nem kell IAM-szerepköröket és szolgáltatásfiókokat beállítania. A Google Cloud Storage szélesebb körű lehetőségeket kínál (Pub/Sub értesítések, Object Lifecycle Management), de kézi hozzáférés-kezelést igényel a GCP IAM segítségével.
A méretkorlátozás a Security Rules segítségével állítható be a request.resource.size használatával. Példa: allow write: if request.resource.size <= 5 * 1024 * 1024 5 MB-ra korlátozza a fájlokat. Ezenkívül a kliens oldalon is ellenőrizheti küldés előtt, hogy ne pazarolja a felhasználó forgalmát nyilvánvalóan nem megengedett fájl esetén.
Igen, a törléshez a StorageReference objektum delete() metódusát használja: storageRef.child("path").delete(). A törlési művelet visszafordíthatatlan, és azonnal eltávolítja a fájlt a bucketből. A fájl csak akkor törölhető, ha a Security Rules engedélyezi a write-ot az adott elérési úton. Törlés után a download URL működésképtelenné válik.
A Security Rules-ban engedélyezze a read-et mindenkinek (vagy hitelesítetteknek), és tiltsa a write-ot: allow read: if request.auth != null; allow write: if false. Az írás ebben a módban csak a Firebase Admin SDK szolgáltatásfiókján keresztül lehetséges — például a Cloud Functions-ból adminisztrátori jogosultságokkal. Ez a szabványos minta termékkatalógusok és nyilvános tartalom esetén.
Az UploadTask a resumable upload protokollt használja, amely HTTP PUT-ra és szegmentálásra épül. Megszakadáskor a feltöltés az utolsó megerősített bájttól folytatódik, nem indul újra. Ennek a viselkedésnek a bekapcsolásához nincs szükség további konfigurációra — az SDK automatikusan elvégzi ezt 1 MB-nál nagyobb fájlok esetén.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is