上传和下载

本页面讨论了有关上传和下载对象的概念。您可以上传和存储大小不超过 5 TB 的任何 MIME 类型数据。

上传

您可以通过以下方式向 Cloud Storage 发送上传请求:

  • 简单上传。如果文件足够小(在连接失败时可以再次上传整个文件),并且没有要作为请求一部分发送的对象元数据,请使用此方式。

  • 分段上传。如果文件足够小(在连接失败时可以再次上传整个文件),并且您希望在请求中包含对象元数据,请使用此方式。

  • 可续传上传。如需进行更可靠的传输(这对于大型文件尤为重要),请使用此方式。对于大多数应用来说,可续传上传是一种很好的方式,因为该方式也适用于小型文件(只不过每次上传时都要多发出一个 HTTP 请求)。您还可以使用流式传输,它是一种可续传上传,可让您上传大小未知的对象。

使用这些基本上传类型,您可以实施更高级的上传策略,例如并行复合上传流式上传

上传大小注意事项

在选择是否要使用可续传上传(而不是简单上传或分段上传)时,请考虑在网络发生故障并且您需要从头开始重新上传的情况下愿意损失的时长。为了提高连接速度,临界值大小通常可以设置得较大。

例如,假设您愿意容忍 30 秒的损失时间:

  • 如果您通过平均上传速度为 8 Mbps 的本地系统上传,则可以对大小为 30 MB 的文件使用简单上传或分段上传。

  • 如果您通过平均上传速度为 500 Mbps 的地区内服务上传,则文件的临界值大小差不多为 2 GB。

并行复合上传

上传大型文件的一种策略称为并行复合上传。在此类上传中,一个文件最多会分为 32 个数据块,这些数据块会并行上传到临时对象,系统会使用临时对象重新创建最终对象并删除临时对象。

如果网络和磁盘速度足够快,则并行复合上传的速度明显快于其他方式的上传速度;但是,存储在存储分区中的最终对象是复合对象,它仅包含 crc32c 哈希值,不包含 MD5 哈希值。因此,在使用 gsutil 或其他 Python 应用下载对象时,您必须使用 crcmod 来执行完整性检查。只有在以下情况下,您才应执行并行复合上传:

  • 您上传到的存储分区没有默认的客户管理的加密密钥,因为 compose 操作不支持以这种方式加密的源对象。

  • 任何需要下载您的对象的 Python 用户都已安装 google-crc32c 或 crcmod。

  • 任何需要下载您的对象的 gsutil 用户都已安装 crcmod。

    例如,如果您使用 gsutil 上传仅由 Java 应用传送的视频资源,则并行复合上传是一种不错的选择,因为 Java 中提供了高效的 CRC32C 实现。

  • 您不需要上传的对象包含 MD5 哈希值

gsutil 支持

您可以通过修改以下两个参数来配置 gsutil 执行并行复合上传(默认情况下处于停用状态)的方式和时间。

  • parallel_composite_upload_threshold:执行并行复合上传的文件总大小下限。您可以在 gsutil 中通过将此值设置为 0 来停用所有并行复合上传功能。

  • parallel_composite_upload_component_size:每个临时对象的大小上限。如果文件总大小太大,以致于按此参数大小分割的数据块数量超过 32 个,则系统会忽略该参数。

您可以通过使用 -o 顶级选项来按命令修改这两个参数,也可以通过修改 .boto 配置文件来对所有 gsutil 命令修改这两个参数。

使用 gsutil 执行并行复合上传时,系统不需要额外的本地磁盘空间。如果并行复合上传在组合对象之前失败,请再次运行 gsutil 命令,以便对失败的临时对象执行可续传上传。在恢复上传时,系统不会重新上传并行复合上传失败之前已成功上传的任何临时对象。

临时对象的命名方式如下:

RANDOM_ID/gsutil/tmp/parallel_composite_uploads/for_details_see/gsutil_help_cp/HASH

其中 RANDOM_ID 是数值,HASH 是 MD5 哈希值(与文件或对象的内容哈希值无关)。

通常,系统会在并行复合上传结束时删除临时对象,但为了避免遗留临时对象,您应通过 gsutil 命令检查退出状态,并且应手动删除在已取消的任何上传过程中上传的任何临时对象。

JSON 和 XML 支持

JSON API 和 XML API 都支持并行上传对象数据块,并且支持使用 compose 操作将它们重新组合为单个对象。

为并行复合上传设计代码时,请注意以下几点:

  • 使用 compose 操作时,源对象不受组合过程的影响。

    这意味着,如果您希望它们暂时存在,则顺利完成组合后您必须明确删除它们,否则源对象会保留在存储分区中并因此而产生费用。

  • 为了防止源对象在上传请求和组合请求之间发生更改,您应为每个源对象提供一个预期的世代编号

下载

您可以通过以下方式向 Cloud Storage 发送下载请求:

  • 简单下载:将对象下载到目标位置。

  • 流式下载:将数据下载到进程。

  • 切片对象下载:下载大型对象。

每个工具的上传和下载支持

点击下面的标签页以查看每个工具支持的操作:

控制台

gsutil

客户端库

REST API

JSON API

XML API

请求端点

如果您使用 REST API 来进行上传和下载,请参阅请求端点,了解您可以使用的请求端点的完整讨论。

后续步骤