在 Apple 平台上创建 Cloud Storage 引用
使用集合让一切井井有条
根据您的偏好保存内容并对其进行分类。
您的文件存储在 Cloud Storage 存储桶中。此存储桶中的文件以分层结构存储,就像本地硬盘中的文件系统或 Firebase Realtime Database 中的数据一样。通过创建指向文件的引用,您的应用便可以访问相应文件。然后,借助所创建的这些引用,您可以上传或下载数据、获取或更新元数据,也可以删除文件。引用可以指向特定的文件,也可以指向层次结构中更高层级的节点。
如果您使用过 Firebase Realtime Database,应当非常熟悉这些路径。只不过,您的文件数据存储在 Cloud Storage 中,而不是存储在 Realtime Database 中。
创建引用
如需上传、下载或删除文件,或者需要获取或更新文件的元数据,请创建引用。引用可以看作是指向云端文件的指针。由于引用属于轻型对象,因此您可以根据需要创建任意多个引用。
这些引用可以重复用于多个操作。
引用是使用 FirebaseStorage
服务并调用其 reference
方法创建的。
Swift
// Get a reference to the storage service using the default Firebase App
let storage = Storage.storage()
// Create a storage reference from our storage service
let storageRef = storage.reference()
Objective-C
// Get a reference to the storage service using the default Firebase App
FIRStorage *storage = [FIRStorage storage];
// Create a storage reference from our storage service
FIRStorageReference *storageRef = [storage reference];
您可以对现有引用使用 child
方法,创建对树中层级较低位置(如 'images/space.jpg'
)的引用。
Swift
// Create a child reference
// imagesRef now points to "images"
let imagesRef = storageRef.child("images")
// Child references can also take paths delimited by '/'
// spaceRef now points to "images/space.jpg"
// imagesRef still points to "images"
var spaceRef = storageRef.child("images/space.jpg")
// This is equivalent to creating the full reference
let storagePath = "\(your_firebase_storage_bucket)/images/space.jpg"
spaceRef = storage.reference(forURL: storagePath)
Objective-C
// Create a child reference
// imagesRef now points to "images"
FIRStorageReference *imagesRef = [storageRef child:@"images"];
// Child references can also take paths delimited by '/'
// spaceRef now points to "images/space.jpg"
// imagesRef still points to "images"
FIRStorageReference *spaceRef = [storageRef child:@"images/space.jpg"];
// This is equivalent to creating the full reference
spaceRef = [storage referenceForURL:@"gs://<your-firebase-storage-bucket>/images/space.jpg"];
通过引用进行导航
您还可以使用 parent
和 root
方法,在我们的文件层次结构中向上导航。parent
可以向上导航一级,而 root
可以一直导航至根目录。
Swift
// Parent allows us to move to the parent of a reference
// imagesRef now points to 'images'
let imagesRef = spaceRef.parent()
// Root allows us to move all the way back to the top of our bucket
// rootRef now points to the root
let rootRef = spaceRef.root()
Objective-C
// Parent allows us to move to the parent of a reference
// imagesRef now points to 'images'
imagesRef = [spaceRef parent];
// Root allows us to move all the way back to the top of our bucket
// rootRef now points to the root
FIRStorageReference *rootRef = [spaceRef root];
child
、parent
和 root
可以链接在一起并链接多次,每次都会返回一个引用。root
的 parent
例外,它是 nil
。
Swift
// References can be chained together multiple times
// earthRef points to "images/earth.jpg"
let earthRef = spaceRef.parent()?.child("earth.jpg")
// nilRef is nil, since the parent of root is nil
let nilRef = spaceRef.root().parent()
Objective-C
// References can be chained together multiple times
// earthRef points to "images/earth.jpg"
FIRStorageReference *earthRef = [[spaceRef parent] child:@"earth.jpg"];
// nilRef is nil, since the parent of root is nil
FIRStorageReference *nilRef = [[spaceRef root] parent];
引用的属性
您可以检查引用的 fullPath
、name
和 bucket
属性,以便更好地了解它们指向的文件。这些属性会反映出文件的完整路径、名称和存储分区。
Swift
// Reference's path is: "images/space.jpg"
// This is analogous to a file path on disk
spaceRef.fullPath
// Reference's name is the last segment of the full path: "space.jpg"
// This is analogous to the file name
spaceRef.name
// Reference's bucket is the name of the storage bucket where files are stored
spaceRef.bucket
Objective-C
// Reference's path is: "images/space.jpg"
// This is analogous to a file path on disk
spaceRef.fullPath;
// Reference's name is the last segment of the full path: "space.jpg"
// This is analogous to the file name
spaceRef.name;
// Reference's bucket is the name of the storage bucket where files are stored
spaceRef.bucket;
引用的限制
引用路径和名称可以包含有效 Unicode 字符的任意序列,但也必须遵循一些限制,具体包括:
- 使用 UTF-8 编码时,reference.fullPath 的总长度必须介于 1 到 1024 个字节之间。
- 不得包含回车符或换行符。
- 避免使用
#
、[
、]
、*
或 ?
,因为这些字符在 Firebase Realtime Database 或 gsutil 等其他工具中无法正常显示。
完整示例
Swift
// Points to the root reference
let storageRef = Storage.storage().reference()
// Points to "images"
let imagesRef = storageRef.child("images")
// Points to "images/space.jpg"
// Note that you can use variables to create child values
let fileName = "space.jpg"
let spaceRef = imagesRef.child(fileName)
// File path is "images/space.jpg"
let path = spaceRef.fullPath
// File name is "space.jpg"
let name = spaceRef.name
// Points to "images"
let images = spaceRef.parent()
Objective-C
// Points to the root reference
FIRStorageReference *storageRef = [[FIRStorage storage] reference];
// Points to "images"
FIRStorageReference *imagesRef = [storageRef child:@"images"];
// Points to "images/space.jpg"
// Note that you can use variables to create child values
NSString *fileName = @"space.jpg";
FIRStorageReference *spaceRef = [imagesRef child:fileName];
// File path is "images/space.jpg"
NSString *path = spaceRef.fullPath;
// File name is "space.jpg"
NSString *name = spaceRef.name;
// Points to "images"
imagesRef = [spaceRef parent];
接下来,我们将了解如何将文件上传到 Cloud Storage。
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-08-16。
[null,null,["最后更新时间 (UTC):2025-08-16。"],[],[],null,["\u003cbr /\u003e\n\nYour files are stored in a\n[Cloud Storage](//cloud.google.com/storage) bucket. The\nfiles in this bucket are presented in a hierarchical structure, just like the\nfile system on your local hard disk, or the data in the Firebase Realtime Database.\nBy creating a reference to a file, your app gains access to it. These references\ncan then be used to upload or download data, get or update metadata or delete\nthe file. A reference can either point to a specific file or to a higher level\nnode in the hierarchy.\n\nIf you've used the [Firebase Realtime Database](/docs/database), these paths should\nseem very familiar to you. However, your file data is stored in\nCloud Storage, **not** in the Realtime Database.\n\nCreate a Reference\n\nCreate a reference to upload, download, or delete a file,\nor to get or update its metadata. A reference\ncan be thought of as a pointer to a file in the cloud. References are\nlightweight, so you can create as many as you need. They are also reusable for\nmultiple operations.\n\nReferences are created using the `FirebaseStorage` service and calling its\n`reference` method. \n\nSwift \n\n```swift\n// Get a reference to the storage service using the default Firebase App\nlet storage = Storage.storage()\n\n// Create a storage reference from our storage service\nlet storageRef = storage.reference()\n \n```\n\nObjective-C \n\n```objective-c\n// Get a reference to the storage service using the default Firebase App\nFIRStorage *storage = [FIRStorage storage];\n\n// Create a storage reference from our storage service\nFIRStorageReference *storageRef = [storage reference];\n \n```\n\nYou can create a reference to a location lower in the tree,\nsay `'images/space.jpg'`, by using the `child` method on an existing reference. \n\nSwift \n\n```swift\n// Create a child reference\n// imagesRef now points to \"images\"\nlet imagesRef = storageRef.child(\"images\")\n\n// Child references can also take paths delimited by '/'\n// spaceRef now points to \"images/space.jpg\"\n// imagesRef still points to \"images\"\nvar spaceRef = storageRef.child(\"images/space.jpg\")\n\n// This is equivalent to creating the full reference\nlet storagePath = \"\\(your_firebase_storage_bucket)/images/space.jpg\"\nspaceRef = storage.reference(forURL: storagePath)\n \n```\n\nObjective-C \n\n```objective-c\n// Create a child reference\n// imagesRef now points to \"images\"\nFIRStorageReference *imagesRef = [storageRef child:@\"images\"];\n\n// Child references can also take paths delimited by '/'\n// spaceRef now points to \"images/space.jpg\"\n// imagesRef still points to \"images\"\nFIRStorageReference *spaceRef = [storageRef child:@\"images/space.jpg\"];\n\n// This is equivalent to creating the full reference\nspaceRef = [storage referenceForURL:@\"gs://\u003cyour-firebase-storage-bucket\u003e/images/space.jpg\"];\n \n```\n\nNavigate with References\n\nYou can also use the `parent` and `root` methods to navigate up in our\nfile hierarchy. `parent` navigates up one level,\nwhile `root` navigates all the way to the top. \n\nSwift \n\n```swift\n// Parent allows us to move to the parent of a reference\n// imagesRef now points to 'images'\nlet imagesRef = spaceRef.parent()\n\n// Root allows us to move all the way back to the top of our bucket\n// rootRef now points to the root\nlet rootRef = spaceRef.root()\n \n```\n\nObjective-C \n\n```objective-c\n// Parent allows us to move to the parent of a reference\n// imagesRef now points to 'images'\nimagesRef = [spaceRef parent];\n\n// Root allows us to move all the way back to the top of our bucket\n// rootRef now points to the root\nFIRStorageReference *rootRef = [spaceRef root];\n \n```\n\n`child`, `parent`, and `root` can be chained together multiple times, as\neach returns a reference. The exception is the `parent` of `root`, which\nis `nil`. \n\nSwift \n\n```swift\n// References can be chained together multiple times\n// earthRef points to \"images/earth.jpg\"\nlet earthRef = spaceRef.parent()?.child(\"earth.jpg\")\n\n// nilRef is nil, since the parent of root is nil\nlet nilRef = spaceRef.root().parent()\n \n```\n\nObjective-C \n\n```objective-c\n// References can be chained together multiple times\n// earthRef points to \"images/earth.jpg\"\nFIRStorageReference *earthRef = [[spaceRef parent] child:@\"earth.jpg\"];\n\n// nilRef is nil, since the parent of root is nil\nFIRStorageReference *nilRef = [[spaceRef root] parent];\n \n```\n\nReference Properties\n\nYou can inspect references to better understand the files they point to\nusing the `fullPath`, `name`, and `bucket` properties. These properties\nget the file's full path, name, and bucket. \n\nSwift \n\n```swift\n// Reference's path is: \"images/space.jpg\"\n// This is analogous to a file path on disk\nspaceRef.fullPath\n\n// Reference's name is the last segment of the full path: \"space.jpg\"\n// This is analogous to the file name\nspaceRef.name\n\n// Reference's bucket is the name of the storage bucket where files are stored\nspaceRef.bucket\n \n```\n\nObjective-C \n\n```objective-c\n// Reference's path is: \"images/space.jpg\"\n// This is analogous to a file path on disk\nspaceRef.fullPath;\n\n// Reference's name is the last segment of the full path: \"space.jpg\"\n// This is analogous to the file name\nspaceRef.name;\n\n// Reference's bucket is the name of the storage bucket where files are stored\nspaceRef.bucket;\n \n```\n\nLimitations on References\n\nReference paths and names can contain any sequence of valid Unicode characters,\nbut certain restrictions are imposed including:\n\n1. Total length of reference.fullPath must be between 1 and 1024 bytes when UTF-8 encoded.\n2. No Carriage Return or Line Feed characters.\n3. Avoid using `#`, `[`, `]`, `*`, or `?`, as these do not work well with other tools such as the [Firebase Realtime Database](/docs/database) or [gsutil](https://cloud.google.com/storage/docs/gsutil).\n\nFull Example \n\nSwift \n\n```swift\n// Points to the root reference\nlet storageRef = Storage.storage().reference()\n\n// Points to \"images\"\nlet imagesRef = storageRef.child(\"images\")\n\n// Points to \"images/space.jpg\"\n// Note that you can use variables to create child values\nlet fileName = \"space.jpg\"\nlet spaceRef = imagesRef.child(fileName)\n\n// File path is \"images/space.jpg\"\nlet path = spaceRef.fullPath\n\n// File name is \"space.jpg\"\nlet name = spaceRef.name\n\n// Points to \"images\"\nlet images = spaceRef.parent()\n \n```\n\nObjective-C \n\n```objective-c\n// Points to the root reference\nFIRStorageReference *storageRef = [[FIRStorage storage] reference];\n\n// Points to \"images\"\nFIRStorageReference *imagesRef = [storageRef child:@\"images\"];\n\n// Points to \"images/space.jpg\"\n// Note that you can use variables to create child values\nNSString *fileName = @\"space.jpg\";\nFIRStorageReference *spaceRef = [imagesRef child:fileName];\n\n// File path is \"images/space.jpg\"\nNSString *path = spaceRef.fullPath;\n\n// File name is \"space.jpg\"\nNSString *name = spaceRef.name;\n\n// Points to \"images\"\nimagesRef = [spaceRef parent];\n \n```\n\nNext, let's learn how to\n[upload files](/docs/storage/ios/upload-files) to\nCloud Storage."]]