关于 firebase-storage
面向 Flutter 的 Firebase Cloud Storage 使用指南,涵盖文件传输、元数据、错误处理、进度监控和访问控制。
主要功能
- 01上传、下载和删除文件
- 02读取并更新文件元数据
- 03处理 Storage 错误与重试
- 04监控、暂停、恢复或取消上传
- 05使用 Firebase Security Rules 控制访问
适用场景
- 01在 Flutter 应用中存取文件
- 02为上传文件附加自定义元数据
- 03显示上传进度并管理传输
- 04按用户权限限制文件访问
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ evanca/ flutter-ai-rules --skill firebase-storage安装后在 Claude Code 中输入/firebase-storage确认已加载。
详细介绍
Firebase Cloud Storage 技能
此技能介绍如何在 Flutter 应用中正确使用 Firebase Cloud Storage。
使用场景
在以下情况下使用此技能:
- 在 Flutter 项目中设置 Cloud Storage。
- 上传或下载文件。
- 管理文件元数据。
- 处理 Storage 错误并监控上传进度。
1. 设置和配置
flutter pub add firebase_storage
import 'package:firebase_storage/firebase_storage.dart';
final storage = FirebaseStorage.instance;
// Or specify a bucket explicitly:
// final storage = FirebaseStorage.instanceFor(bucket: "gs://BUCKET_NAME");
- Firebase Storage 要求使用 Blaze(按需付费)套餐。
- 运行
flutterfire configure,使用默认 Storage 存储桶名称更新 Firebase 配置。
安全提示: 默认情况下,Cloud Storage 存储桶要求所有操作都通过 Firebase Authentication 进行身份验证。配置公开访问也可能使 App Engine 文件可公开访问 — 设置 Authentication 时,请重新限制访问权限。
2. 文件操作
创建引用:
final storageRef = FirebaseStorage.instance.ref();
final fileRef = storageRef.child("uploads/file.jpg");
上传:
final uploadTask = fileRef.putFile(file);
final snapshot = await uploadTask;
final downloadUrl = await snapshot.ref.getDownloadURL();
下载(到内存):
final data = await fileRef.getData();
下载 URL:
final downloadUrl = await fileRef.getDownloadURL();
删除:
await fileRef.delete();
3. 元数据管理
获取元数据:
final metadata = await fileRef.getMetadata();
print('Content type: ${metadata.contentType}');
print('Size: ${metadata.size}');
更新元数据:
final newMetadata = SettableMetadata(
contentType: "image/jpeg",
customMetadata: {'uploaded_by': 'user123'},
);
await fileRef.updateMetadata(newMetadata);
使用自定义元数据为文件存储其他键值对。
4. 错误处理
使用 try-catch 和 FirebaseException。主要错误代码:
| 代码 | 含义 |
|---|---|
storage/object-not-found | 引用所指向的文件不存在 |
storage/bucket-not-found | 未为 Cloud Storage 配置存储桶 |
storage/project-not-found | 未为 Cloud Storage 配置项目 |
storage/quota-exceeded | 超出存储配额 |
storage/unauthenticated | 用户需要进行身份验证 |
storage/unauthorized | 用户没有权限 |
storage/retry-limit-exceeded | 操作超时 |
- 在 Spark 套餐中遇到
quota-exceeded时,请升级到 Blaze。 - 针对网络相关错误和超时实现重试逻辑。
5. 性能和最佳实践
监控上传进度:
final uploadTask = fileRef.putFile(file);
uploadTask.snapshotEvents.listen((TaskSnapshot snapshot) {
print('Progress: ${(snapshot.bytesTransferred / snapshot.totalBytes) * 100}%');
});
- 使用
uploadTask.cancel()取消上传。 - 使用
uploadTask.pause()和uploadTask.resume()暂停 / 恢复上传。 - 上传前优化文件大小,以降低成本并提升性能。
- 将 Cloud Storage 与 Firestore 配合使用,实现全面的数据管理。
- 使用 Firebase Local Emulator Suite 进行本地开发和测试。
6. 安全
- 使用 Firebase Security Rules 控制对文件的访问。
- 将 Storage 规则与 Firebase Authentication 结合,实现基于用户的访问控制。
- 在部署到生产环境前,全面测试安全规则。
参考资料
评论
支持 Markdown