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"
}