如何使用生产存储桶数据启动 Firebase 存储模拟器?

2024-07-04

我正在使用 Firebase 模拟器来运行所有 Firebase 服务。我已成功通过运行以下命令来运行模拟器并备份 Firestore 数据:

firebase emulators:start --import ./my-directory

...但我找不到对我的存储数据执行相同操作的方法。


Export

您可以使用 gsutil 导出数据。

gsutil -m cp -R gs://$STORAGE_BUCKET $OUT_DIR

这将创建 $OUT_DIR 指定的目录并下载存储桶 $STORAGE_BUCKET 中的所有内容

Import

要导入到模拟器,您可以使用 REST api。

首先,查看哪个是存储模拟器端点:

您可以使用以下方式上传文件PUT。端点 URL 是http://$END_POINT/v0/b/$STORAGE_BUCKET/o/$DEST_ENCODED。并且该文件必须作为数据二进制在主体上传递。

这是卷曲语句:

curl -X PUT --data-binary @./$FILE http://$END_POINT/v0/b/$STORAGE_BUCKET/o/$DEST_ENCODED

例如,如果您的存储桶名称为my_bucket.appspot.com并且您想要上传文件照片.png在根上,URL 是http://127.0.0.1:19199/v0/b/my_bucket.appspot.com/o/photo.png.

curl -X PUT --data-binary @./photo.png http://127.0.0.1:19199/v0/b/my_bucket.appspot.com/o/photo.png

如果要上传的文件必须位于目录内,则必须使用斜杠分隔符进行编码%2F。例如,用于上传文件照片.png to 用户/48329884/photo.png,URL 必须是:http://127.0.0.1:19199/v0/b/my_bucket.appspot.com/o/user%2F48329884%2Fphoto.png.

curl -X PUT --data-binary @./photo.png http://127.0.0.1:19199/v0/b/my_bucket.appspot.com/o/user%2F48329884%2Fphoto.png

上传文件始终带有内容类型标记application/octet-stream。更改标题请愿书上的内容类型不会产生任何效果。

要更改内容类型,您必须使用相同的端点,但带有PATCH动词,并传递一个表示要更改的元数据的文件。

curl -X PATCH --data-binary @./metadata_import.json -H "Content-Type: application/json" http://127.0.0.1:19199/v0/b/$STORAGE_BUCKET/o/$DEST_ENCODED

元数据 json 文件必须如下所示:

{
  "contentType": $CONTENT_TYPE
}

例如,将内容类型更改为image/png到前面的例子:

元数据导入.json文件必须包含:

{
  "contentType": "image/png"
}

并且 URL 必须是:

curl -X PATCH --data-binary @./metadata_import.json -H "Content-Type: application/json" http://127.0.0.1:19199/v0/b/my_bucket.appspot.com/o/user%2F48329884%2Fphoto.png

用于导出和导入的 Bash 文件

我创建了两个 bash 文件,用于从任何环境导出并导入到模拟器。

如果更喜欢克隆存储库:https://github.com/dumabg/storage_export_import_emulator https://github.com/dumabg/storage_export_import_emulator

存储导出.sh

#!/bin/bash
Red='\033[1;31m'
White='\033[1;37m'
if [ -z $1 ]; then
    printf "${Red}Error parameters: ${White}$0 <storage bucket> <out dir>\n"
    echo "storage bucket without .appspot.com"
    echo "out dir default to out"
    exit 1
fi
if [ -z $2 ]; then
    OUT="out"
else
    OUT=$2
fi
echo $OUT
gsutil -m cp -R gs://$1.appspot.com $OUT

存储导入.sh

#!/bin/bash
Red='\033[1;31m'
White='\033[1;37m'
if [ -z $1 ]; then
    printf "${Red}Error parameters: ${White}$0 <storage bucket> <dir>\n"
    echo "storage bucket without .appspot.com"
    exit 1
fi
export STORAGE_BUCKET=$1
export SRC_DIR=$2
import_file() {
    FILE=$1
    DEST=${FILE/$SRC_DIR/}
    DEST_ENCODED=${DEST////%2F}
    curl -X PUT --data-binary @./$FILE http://127.0.0.1:19199/v0/b/$STORAGE_BUCKET.appspot.com/o/$DEST_ENCODED
    curl -X PATCH --data-binary @./metadata_import.json -H "Content-Type: application/json" http://127.0.0.1:19199/v0/b/$STORAGE_BUCKET.appspot.com/o/$DEST_ENCODED
    return 0
}
export -f import_file

find $2 -type f -print0 | xargs -0 -I {} bash -c 'import_file "{}"'

元数据导入.json

{
  "contentType": "image/jpeg"
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用生产存储桶数据启动 Firebase 存储模拟器? 的相关文章

随机推荐

  • 张量流批量稀疏乘法

    我想将稀疏张量乘以密集张量 但在批次内进行 例如 我有一个稀疏张量 其相应的密集形状为 20 65536 65536 其中 20 是批量大小 我想将批次中的每个 65536 65536 与具有密集表示的张量形状 20 65536 中的相应
  • 收据在打印文档中有重叠文本

    我正在 POS 项目中创建打印收据并附上输出的图片 我的问题是描述 数量 价格 金额的重叠 如何在这段代码的下一行显示数量 价格和金额 e Graphics DrawString Description new Font trebuchet
  • Java 类卡枚举示例。修改

    任何帮助深表感谢 我正在使用 java 网站上的类卡示例来尝试构建游戏 http java sun com j2se 1 5 0 docs guide language enums html http java sun com j2se 1
  • OpenCV 图像处理——C++、C、Python

    我正在考虑在一个项目中尝试 OpenCV 并注意到它有 C C 和 Python 我正在尝试确定是否应该使用 C C 还是 Python 并且希望使用具有最佳 OpenCV 支持的任何语言 仅从查看各种文档的索引页来看 C 绑定可能比其他绑
  • 读取 NFC 标签时出现奇怪的字符

    我正在尝试使用 Android 读取 NFC 标签 我是一名养蜂人 这是为了在我接近蜂巢时识别它们 我已经在这里搜索过 但阅读标签时仍然遇到问题 我想阅读文本 但是当它阅读时 在所需文本之前有一个类似正方形的字符和显示为 十 的字符 这是我
  • 让 Android 源中的应用程序编译到 system/app 而不是 data/app 中?

    我正在从源代码编译 Android ROM 并且我有几个可以编译的应用程序 但会编译到手机上的数据 应用程序中 它们可以通过手机设置卸载 我希望它们不可能从手机中卸载 并编译到系统 应用程序而不是数据 应用程序中 有什么建议吗 编辑 错别字
  • 为什么我无法初始化 Map? [复制]

    这个问题在这里已经有答案了 我想存储一组int String值 但是ints 不一定是增量的 这意味着数据可以是 lt 1 first gt lt 3 second gt lt 9 third gt 所以我正在尝试创建与Dictionary
  • Gulp Sass - 如何正确命名输出 css?

    我正在阅读有关 sass 的教程here https scotch io tutorials getting started with sass然后我尝试了其他方法 但在本教程中无法得到答案 这就是问题所在 我的 gulpfile js 中
  • 如何仅针对一项特定修改器更改应用动画?

    如何只申请 animation to offset同时保持其他修改器更改不受其影响 添加 animation偏移后也会使字体大小发生变化 Main view var body some View GeometryReader geo in
  • Androidx 模块,android:attr/ttcIndex 和 android:attr/fontVariationSettings 未找到

    我正在将所有支持 appcompat 库迁移到 androidx 所有更新后 由于此错误 我无法构建我的项目 app processDebugManifest UP TO DATE AGPBI kind error text error r
  • 处理 jQuery 中的所有事件类型

    在使用 jQuery 的应用程序中 我希望每次触发任何类型的事件 包括自定义事件 时都记录到控制台 无论如何 是否可以在不修改 jQuery 源代码并且不绑定到每个可能的事件类型的长列表的情况下执行此操作 var oldTrigger jQ
  • pyqt 中的代码编辑器示例

    我尝试学习一些Qt PyQt 为此 我使用了代码编辑器示例 http doc qt io qt 4 8 qt widgets codeeditor example html的文档 当前行的突出显示效果很好 但行号不显示 实际上LineNum
  • 即使授予用户组完全权限后也无法在 C:\ProgramData\ 中创建文件

    我们有一个应用程序尝试写入 C ProgramData 文件夹中的 Access 数据库 mdb 在启用 UAC 的计算机上 我们发现访问数据库失败 因为它似乎无法创建锁定文件 默认情况下 可能是由于 UAC 用户 包括管理员 似乎没有写入
  • Rails 3 Observer——希望学习如何为多个模型实现观察者

    我想添加一个 Auditor Observer 它可以在创建 3 个模型 书籍 人物 作者 后随时执行操作 我最近听说了观察者功能 但找不到任何有关该功能的文档 Rails 3 支持吗 如何创建一个 Auditor Observer 来为
  • R as.POSIXct() 删除小时、分钟和秒

    我正在尝试用 R 来分析一些测量数据 我有一个 csv 文件 其中包含超过 200 万条测量线 这是一个例子 2014 10 22 21 07 03 00 00 7432442 0 2014 10 22 21 07 21 00 00 743
  • 禁用 Android Monkey 上的系统级事件

    当猴子测试我的应用程序时 adb shell monkey p com foo bar throttle 1000 v 14400 我注意到它可以访问我设备上的各种系统设置 例如音频控制和屏幕截图 根据http developer andr
  • 使用 gdb 在 xv6 上调试用户代码

    我正在做一个基于 xv6 的操作系统类 并且编写了一个需要在其上运行的程序 我知道我可以调试内核代码make qemu gdb但我不知道如何调试我自己的用户程序 假设我想调试cat 我该怎么做呢 Thanks 附 不是有xv6标签吗 这个问
  • Gitweb 失败:致命:refs/heads/master 缺少对象 0000000000000000000000000000000000000000 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在尝试将 gitweb 与一组由
  • 错误:“访问受限 URI 被拒绝”

    访问受限 URI 被拒绝 代码 1012 中断此错误 xhttp send null function getXML xml file if window XMLHttpRequest var xhttp new XMLHttpReques
  • 如何使用生产存储桶数据启动 Firebase 存储模拟器?

    我正在使用 Firebase 模拟器来运行所有 Firebase 服务 我已成功通过运行以下命令来运行模拟器并备份 Firestore 数据 firebase emulators start import my directory 但我找不