Cloud Storage 支持流式传输(允许您通过流式传输将数据传入和传出 Cloud Storage 帐号,而无需先将数据保存到文件中)。流式传输在以下情况下很有用:
您想要上传数据,但是在上传开始时不知道数据的最终大小(例如从进程生成上传数据或者即时压缩对象时)。
您想要将 Cloud Storage 中的数据下载到进程中。
流式传输时使用校验和验证
由于只能在上传的初始请求中提供校验和,因此在流式传输时利用 Cloud Storage 的校验和验证通常不可行。建议您始终使用校验和验证,并且可以在流式上传完成后手动执行此操作:但是,在传输完成后进行验证意味着在确认损坏并移除数据期间可以访问任何损坏的数据。
如果您需要在上传完成且数据可以访问之前进行校验和验证,则不应使用流式上传。您应该改用在对象完成之前执行校验和验证的上传选项。
同样,如果要求在下载完成且数据可访问之前执行校验和验证,则不应使用流式下载。这是因为流式下载使用 Range
标头,并且 Cloud Storage 不会对此类请求执行校验和验证。
前提条件
前提条件因所使用的工具而异:
控制台
如需使用 Google Cloud 控制台完成本指南,您必须拥有适当的 IAM 权限。如果您要访问以进行流式传输的存储桶所在项目不是您创建的,则可能需要项目所有者为您提供包含必要权限的角色。
如需查看特定操作所需权限的列表,请参阅 Google Cloud 控制台的 IAM 权限。
如需查看相关角色的列表,请参阅 Cloud Storage 角色。或者,您也可以创建一个自定义角色,并为其提供具体受限的权限。
命令行
如需使用命令行实用程序完成本指南,您必须拥有适当的 IAM 权限。如果您要访问以进行流式传输的存储桶所在项目不是您创建的,则可能需要项目所有者为您提供具有必要权限的角色。
如需查看特定操作所需权限的列表,请参阅 gsutil 命令的 IAM 权限。
如需查看相关角色的列表,请参阅 Cloud Storage 角色。或者,您也可以创建一个自定义角色,并为其提供具体受限的权限。
代码示例
如需使用 Cloud Storage 客户端库完成本指南,您必须拥有适当的 IAM 权限。如果您要访问以进行流式传输的存储桶所在项目不是您创建的,则可能需要项目所有者为您提供具有必要权限的角色。除非另有说明,否则客户端库请求通过 JSON API 发出。
如需查看特定操作所需的权限列表,请参阅 JSON 方法的 IAM 权限。
如需查看相关角色的列表,请参阅 Cloud Storage 角色。或者,您也可以创建一个自定义角色,并为其提供具体受限的权限。
REST API
JSON API
如需使用 JSON API 完成本指南,您必须拥有适当的 IAM 权限。如果您要访问以进行流式传输的存储桶所在项目不是您创建的,则可能需要项目所有者为您提供具有必要权限的角色。
如需查看特定操作所需的权限列表,请参阅 JSON 方法的 IAM 权限。
如需查看相关角色的列表,请参阅 Cloud Storage 角色。或者,您也可以创建一个自定义角色,并为其提供具体受限的权限。
流式上传
以下示例展示了如何执行从进程到 Cloud Storage 对象的流式上传:
控制台
Google Cloud 控制台不支持流式上传。请改用 gcloud CLI。
命令行
gcloud
将数据传输到
gcloud storage cp
命令并使用短划线表示源网址:PROCESS_NAME | gcloud storage cp - gs://BUCKET_NAME/OBJECT_NAME
其中:
PROCESS_NAME
是您要从中收集数据的进程的名称。例如collect_measurements
。BUCKET_NAME
是包含对象的存储分区的名称。例如my_app_bucket
。OBJECT_NAME
是使用数据创建的对象的名称。例如data_measurements
。
gsutil
将数据传输到
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#
如需了解详情,请参阅 Cloud Storage C# API 参考文档。
Go
如需了解详情,请参阅 Cloud Storage Go API 参考文档。
Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
Node.js
如需了解详情,请参阅 Cloud Storage Node.js API 参考文档。
PHP
如需了解详情,请参阅 Cloud Storage PHP API 参考文档。
Python
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
Ruby
如需了解详情,请参阅 Cloud Storage Ruby API 参考文档。
REST API
JSON API
如需执行流式上传,请按照执行可续传上传的说明操作,并注意以下几点:
上传文件数据本身时,请使用多个数据块上传。
由于您在上传最终数据块之前不知道文件的总大小,因此请在中间数据块的
Content-Range
标头中使用*
来表示文件的总大小。例如,如果您上传的第一个数据块的大小为 512 KiB,则该数据块的
Content-Range
标头为bytes 0-524287/*
。如果上传第一个数据块后剩余 64000 字节,则您随后会发送一个包含剩余字节并且Content-Range
标头值为bytes 524288-588287/588288
的最终数据块。
XML API
如需执行流式上传,请使用以下方法之一:
流式下载
以下示例展示了如何执行从 Cloud Storage 对象到进程的下载:
控制台
Google Cloud 控制台不支持流式下载。请改用 gcloud CLI。
命令行
gcloud
运行
gcloud storage cp
命令(注意使用短划线表示目标网址),然后将数据传输到该进程:gcloud storage 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:
gcloud storage cp gs://my_app_bucket/data_measurements - | sort
gsutil
运行
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#
如需了解详情,请参阅 Cloud Storage C# API 参考文档。
Go
如需了解详情,请参阅 Cloud Storage Go API 参考文档。
Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
Node.js
如需了解详情,请参阅 Cloud Storage Node.js API 参考文档。
PHP
如需了解详情,请参阅 Cloud Storage PHP API 参考文档。
Python
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
Ruby
如需了解详情,请参阅 Cloud Storage Ruby API 参考文档。