You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不下载到本地将GCP存储桶内任意格式文件发送到其他服务器

实现方案

完全可以做到不落地本地存储,直接通过内存流完成跨服务传输,全程不会写入本地磁盘,且所有格式文件的二进制内容都和GCP存储桶原文件完全一致,不会出现损坏。

核心实现逻辑

使用Python标准库io.BytesIO作为内存缓冲区,或者直接调用GCP SDK提供的blob流式读取接口,将GCP文件直接加载到内存/直接生成可读流,再将流对象直接传递给requests的文件上传参数即可,不需要经过本地磁盘存储环节。

代码示例

from google.cloud import storage
import requests
from io import BytesIO

# 初始化GCP存储客户端
storage_client = storage.Client()
bucket = storage_client.get_bucket("替换为你的GCP存储桶名称")
blob = bucket.blob("替换为存储桶内目标文件的路径")

# 方案1:小文件场景,直接下载到内存缓冲区
file_buffer = BytesIO()
blob.download_to_file(file_buffer)
# 重置缓冲区指针到起始位置,否则上传时会读取空内容
file_buffer.seek(0)

# 发起上传请求
upload_url = "替换为目标服务器的上传接口地址"
files = {
    "file": ("替换为上传时要使用的文件名", file_buffer)
}
response = requests.post(upload_url, files=files)
response.raise_for_status()

大文件优化方案

如果需要传输的文件体积较大,不想占用过多内存,可以直接使用GCP SDK的流式读取接口,不需要手动创建内存缓冲区:

from google.cloud import storage
import requests

storage_client = storage.Client()
bucket = storage_client.get_bucket("替换为你的GCP存储桶名称")
blob = bucket.blob("替换为存储桶内目标文件的路径")
upload_url = "替换为目标服务器的上传接口地址"

# 直接打开blob的可读流,对接requests上传
with blob.open("rb") as blob_stream:
    files = {
        "file": ("替换为上传时要使用的文件名", blob_stream)
    }
    response = requests.post(upload_url, files=files)
    response.raise_for_status()

注意事项

  • 全程操作的都是原始二进制流,没有任何编码转换逻辑,不管是文本、图片、音视频、压缩包还是其他任意格式的文件,都能保证和GCP存储桶内的原文件哈希值完全一致,不会出现损坏
  • 如果需要批量处理文件,处理完单个文件后及时关闭流对象或者清空缓冲区即可,不会产生累计的内存占用

内容的提问来源于stack exchange,提问作者Kate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 17:06:03