mcpField
F
firebase-storage

firebase-storage

github.com/evanca云与 DevOps665171 次安装1 天前更新
代码仓库

关于 firebase-storage

面向 Flutter 的 Firebase Cloud Storage 使用指南,涵盖文件传输、元数据、错误处理、进度监控和访问控制。

主要功能

  1. 01上传、下载和删除文件
  2. 02读取并更新文件元数据
  3. 03处理 Storage 错误与重试
  4. 04监控、暂停、恢复或取消上传
  5. 05使用 Firebase Security Rules 控制访问

适用场景

  1. 01在 Flutter 应用中存取文件
  2. 02为上传文件附加自定义元数据
  3. 03显示上传进度并管理传输
  4. 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