流式传输

Cloud Storage 支持流式传输(允许您通过流式传输将数据传入和传出 Cloud Storage 帐号,而无需先将数据保存到文件中)。

如果您在上传开始时不知道数据的最终大小(例如在从进程生成上传数据或者即时压缩对象时),则流式上传在您想要上传这样的数据时非常有用。

如果您想要将 Cloud Storage 中的数据下载到进程中,则流式下载非常有用。

流式上传

以下示例展示了如何执行从进程到 Cloud Storage 对象的流式上传:

gsutil

  1. 将数据传输到 gsutil cp 命令并使用短划线表示源网址:

    PROCESS_NAME | gsutil cp - gs://BUCKET_NAME/OBJECT_NAME

    其中:

    • PROCESS_NAME 是您要从中收集数据的进程的名称。例如 collect_measurements
    • BUCKET_NAME 是包含对象的存储分区的名称。例如 my_app_bucket
    • OBJECT_NAME 是使用数据创建的对象的名称。例如 data_measurements

客户端库

C++

如需了解详情,请参阅 Cloud Storage C++ API 参考文档

如需使用 C++ 流式上传对象,请参阅 WriteObject 参考文档。

C#

如需了解详情,请参阅 Cloud Storage C# API 参考文档

如需使用 C# 流式上传对象,请参阅 SimpleUpload 参考文档。

Go

如需了解详情,请参阅 Cloud Storage Go API 参考文档

如需使用 Go 流式上传对象,请参阅 NewWriter 参考文档。

请注意,Go 分别使用标准的 io.Writerio.Reader 接口进行上传和下载,这两者均允许流式传输。

Java

如需了解详情,请参阅 Cloud Storage Java API 参考文档

如需使用 Java 流式上传对象,请参阅 writer 参考文档。

Node.js

如需了解详情,请参阅 Cloud Storage Node.js API 参考文档

如需使用 Node.js 流式上传对象,请参阅 createWriteStream 参考文档。

PHP

如需了解详情,请参阅 Cloud Storage PHP API 参考文档

如需使用 PHP 流式上传对象,请参阅 upload 参考文档。

Python

如需了解详情,请参阅 Cloud Storage Python API 参考文档

您目前无法使用 Python 客户端库执行流式上传。

Ruby

如需了解详情,请参阅 Cloud Storage Ruby API 参考文档

您目前无法使用 Ruby 客户端库执行流式上传。

REST API

JSON API

如需执行流式上传,请按照执行可续传上传的说明操作,并注意以下几点:

  • 上传文件数据本身时,请使用多个数据块上传

  • 由于您在上传最终数据块之前不知道文件的总大小,因此请在中间数据块的 Content-Range 标头中使用 * 来表示文件的总大小。

    例如,如果您上传的第一个数据块的大小为 512K,则该数据块的 Content-Range 标头为 0-524287/*。如果上传第一个数据块后剩余 64000 字节,则您随后会发送一个包含剩余字节并且 Content-Range 标头值为 524288-588287/588288 的最终数据块。

XML API

如需执行流式上传,请按照执行可续传上传的说明操作,并注意以下几点:

  • 上传文件数据本身时,请使用多个数据块上传

  • 由于您在上传最终数据块之前不知道文件的总大小,因此请在中间数据块的 Content-Range 标头中使用 * 来表示文件的总大小。

    例如,如果您上传的第一个数据块的大小为 512K,则该数据块的 Content-Range 标头为 0-524287/*。如果上传第一个数据块后剩余 64000 字节,则您随后会发送一个包含剩余字节并且 Content-Range 标头值为 524288-588287/588288 的最终数据块。

流式下载

以下示例展示了如何执行从 Cloud Storage 对象到进程的下载:

gsutil

  1. 运行 gsutil cp 命令(注意使用短划线表示目标网址),然后将数据传输到该进程:

    gsutil cp gs://BUCKET_NAME/OBJECT_NAME - | PROCESS_NAME

    其中:

    • BUCKET_NAME 是包含对象的存储分区的名称。例如 my_app_bucket
    • OBJECT_NAME 是您要流式传输到进程的对象的名称。例如 data_measurements
    • PROCESS_NAME 是您要向其输送数据的进程的名称。例如 analyze_data

您还可以将数据从 Cloud Storage 对象流式传输到标准 Linux 命令,比如 sort

gsutil cp gs://my_app_bucket/data_measurements - | sort

客户端库

C++

如需了解详情,请参阅 Cloud Storage C++ API 参考文档

如需使用 C++ 流式下载对象,请参阅 ReadObject 参考文档。

C#

如需了解详情,请参阅 Cloud Storage C# API 参考文档

如需使用 C# 流式下载对象,请参阅 SimpleDownload 参考文档。

Go

如需了解详情,请参阅 Cloud Storage Go API 参考文档

如需使用 Go 流式下载对象,请参阅 NewReader 参考文档。

请注意,Go 分别使用标准的 io.Writerio.Reader 接口进行上传和下载,这两者均允许流式传输。

Java

如需了解详情,请参阅 Cloud Storage Java API 参考文档

如需使用 Java 流式下载对象,请参阅 reader 参考文档。

Node.js

如需了解详情,请参阅 Cloud Storage Node.js API 参考文档

如需使用 Node.js 流式下载对象,请参阅 createReadStream 参考文档。

PHP

如需了解详情,请参阅 Cloud Storage PHP API 参考文档

如需使用 PHP 流式下载对象,请参阅 downloadAsStreams 参考文档。

Python

如需了解详情,请参阅 Cloud Storage Python API 参考文档

您目前无法使用 Python 客户端库执行流式下载。

Ruby

如需了解详情,请参阅 Cloud Storage Ruby API 参考文档

您目前无法使用 Ruby 客户端库执行流式下载。