为何写入GCS存储桶却生成本地开发Blob存储条目?
解决GAE本地开发时文件上传到本地Blobstore而非云端GCS的问题
嘿,我之前在使用GAE标准环境老版本SDK开发时,也碰到过一模一样的问题!其实这是因为1.9.61版本的本地开发服务器默认会用模拟的Blobstore来替代真实的GCS——目的是让你在离线状态下也能开发,但这就导致你的上传操作都落到本地了,没到云端桶里。下面是我当时解决这个问题的步骤:
一、启动本地服务器时强制连接云端GCS
老版本的dev_appserver.py需要通过特定参数关闭本地Blobstore模拟,直接连接真实的GCS。你启动服务器的时候,要加上这个参数:
dev_appserver.py --blobstore_cloud_storage_bucket=gs://your-default-bucket-name your_app_directory
把your-default-bucket-name替换成你在云控制台看到的默认桶名(格式一般是[你的项目ID].appspot.com)。如果要用到暂存桶,就换成暂存桶的名称。
二、配置本地服务账号权限
本地开发服务器需要有访问云端GCS的权限,所以你得:
- 去云控制台的IAM与管理 > 服务账号页面,创建一个新的服务账号(或用现有账号),给它添加
Storage Object Creator或者Storage Admin的权限(后者权限更大,开发时用没问题)。 - 下载这个服务账号的JSON密钥文件,保存到本地。
- 启动服务器前,设置环境变量指向这个密钥文件:
# Linux/macOS export GOOGLE_APPLICATION_CREDENTIALS="/path/to/your-service-account-key.json" # Windows(命令提示符) set GOOGLE_APPLICATION_CREDENTIALS=C:\path\to\your-service-account-key.json
三、检查代码里的桶名是否正确
确保你代码里指定的桶名和云端存在的桶完全一致,比如:
import cloudstorage as gcs bucket_name = 'your-project-id.appspot.com' file_path = '/{}/test-upload.txt'.format(bucket_name) with gcs.open(file_path, 'w') as f: f.write('Hello GCS!')
这里的bucket_name必须和云控制台里的桶名一字不差,注意GCS桶名是全小写的,别写错大小写。
四、验证结果
启动服务器后运行上传代码,然后去云控制台的GCS页面刷新,应该就能看到新上传的文件了。同时你可以检查本地的.blobstore目录(如果存在的话),不会再新增本地条目,说明上传请求已经走到云端了。
另外提个小提醒:1.9.61是比较旧的SDK版本,如果你后续升级SDK,新版本的本地开发服务器可能默认就支持直接连接GCS,但当前版本就得按上面的步骤来配置~
内容的提问来源于stack exchange,提问作者Brian
相关产品推荐
相关产品推荐

