如何在gsutil cp下载时保留/重建存储桶对象元数据并同步到Firebase存储模拟器
GCS与Firebase Storage模拟器同步解决方案
1. 生成/更新../storage_export/metadata路径下的JSON元数据
Firebase Storage模拟器的导入逻辑要求blobs目录下的每一个文件,必须在metadata目录下有一一对应的JSON元数据文件,匹配规则为:blobs/<文件路径>对应metadata/<文件路径>.json。
你可以按照以下规则批量生成元数据文件:
- 遍历
../storage_export/blobs下的所有新增文件,收集每个文件的基础属性 - 生成对应路径的JSON文件,必填字段如下,缺省会导致模拟器导入失败:
name:文件在存储桶中的绝对路径,不含桶名前缀,示例:user/1001/avatar.jpgbucket:Firebase存储桶ID,格式通常为<你的项目ID>.appspot.comcontentType:文件的MIME类型,可通过工具库自动识别size:文件大小,单位为字节timeCreated、updated:ISO 8601格式的时间戳,可直接使用GCS云端文件的创建/修改时间,无数据源时使用本地文件修改时间也可正常识别
- 可选字段可按需补充:
md5Hash、customMetadata(自定义元数据)、contentDisposition等
示例元数据文件结构:
{ "name": "user/1001/avatar.jpg", "bucket": "my-project.appspot.com", "contentType": "image/jpeg", "size": 204800, "timeCreated": "2024-01-01T12:00:00.000Z", "updated": "2024-01-01T12:00:00.000Z", "customMetadata": { "uploader": "user_1001" } }
2. gsutil cp下载时保留/重建元数据
下载时直接保留元数据
执行下载命令时添加-p参数即可保留GCS云端文件的所有元数据、修改时间等属性,完整命令参考:
gsutil cp -r -p gs://<你的存储桶ID>/* <本地保存路径>
如果需要批量快速下载可额外添加-m参数开启并行传输。
已完成下载后补全元数据
如果已经下载完所有文件,可通过以下命令导出云端所有文件的结构化元数据,再批量匹配本地文件生成模拟器需要的JSON即可:
# 导出JSON格式的全桶文件元数据到本地文件 gsutil ls -j gs://<你的存储桶ID>/** > gcs_metadata.json
导出的JSON中已经包含所有你需要的元数据字段,直接解析匹配对应本地文件即可。
内容的提问来源于stack exchange,提问作者katyusha
相关产品推荐
相关产品推荐

