如何将Cloud Function /tmp目录的CSV文件移动至Google Cloud Storage存储桶
报错原因
你当前调用的方法与上传场景不匹配,且路径拼接不符合GCS操作规范,触发了报错:
download_to_filename()是将GCS文件下载到本地的接口,无法用于本地上传至GCS的操作copy_blob()是GCS存储桶内部/跨桶的Blob复制接口,无法读取本地/tmp目录的文件- 你传入的
my-project.appspot.com/my-folder/my-converted-file.csv是GCS对象的全路径,本地文件系统不存在该路径,因此触发FileNotFoundError
正确实现方案
你需要使用blob.upload_from_filename()接口,将/tmp目录下的本地CSV文件直接上传到GCS指定路径,具体实现如下:
- 先在项目的
requirements.txt中添加依赖:
google-cloud-storage>=2.0.0
- 上传逻辑代码示例:
from google.cloud import storage # 初始化GCS客户端,Cloud Function runtime会自动读取默认服务账号凭证,无需手动配置 storage_client = storage.Client() # 替换为实际参数 bucket_name = "my-project.appspot.com" # 你的目标存储桶名 local_csv_path = "/tmp/generated_file.csv" # 你在/tmp下生成的CSV文件路径 gcs_target_path = "my-folder/my-converted-file.csv" # 桶内目标存储路径,不需要带桶名 # 执行上传 bucket = storage_client.bucket(bucket_name) target_blob = bucket.blob(gcs_target_path) target_blob.upload_from_filename(local_csv_path)
注意事项
- Cloud Function默认服务账号需要拥有目标存储桶的
storage.objectCreator权限,否则会触发权限拒绝报错 - 如果你的Cloud Function是由原始CSV上传事件触发的,可以直接从事件参数中提取原始文件的所属文件夹路径,自动拼接生成目标
gcs_target_path,无需硬写路径
内容的提问来源于stack exchange,提问作者EhMaMuffin
相关产品推荐
相关产品推荐

