google-cloud-storage - 如何将文件分块上传到谷歌存储?

标签 google-cloud-storage chunks pre-signed-url

我正在尝试以多个 block 但已签名的 URL 将文件上传到谷歌存储。

以下是我正在执行的步骤:

  1. 使用 Node.js 创建可续传的上传 URL。

示例网址:https://www.googleapis.com/upload/storage/v1/b/MYBUCKET/o?name=sdk2.txt&uploadType=resumable&upload_id=AEnB2UrmFY9CKwkHFxsYdT71LcWa0zUVjG6iYfr9mHiwsIaG3c1goFiVURUPz6KFTIhtywndse00XaOkH7ftXPf82S7bNVRhPg

  1. 启动可恢复的上传 session :

POST https://www.googleapis.com/upload/storage/v1/b/MYBUCKET/o?name=sdk2.txt&uploadType=resumable&upload_id=AEnB2UrmFY9CKwkHFxsYdT71LcWa

使用这些 header :

Content-Type:text/plain
name:sdk2.txt
Content-Length:0
x-goog-resumable:start

HTTPS 响应:200 OK

  1. 发送第一个 block :

PUT https://www.googleapis.com/upload/storage/v1/b/MYBUCKET/o?name=sdk2.txt&uploadType=resumable&upload_id=AEnB2UrmFY9CKwkHFxsYdT71LcWa0zUVjG6iYfr9mHiwsIaG3c1goFiVURUPz6KFTIhtywndse00XaOkH7ftXPf82S7bNVRhPg

使用这些 header :

Content-Type:text/plain
name:sdk2.txt
Content-Length: 262144
Content-Range: bytes 0-262143/331886 

HTTPS 响应:200 OK有数据:

 {
  "kind": "storage#object",
  "id": "MYBUCKET/sdk2.txt/1490608714382301",
  "selfLink": "https://www.googleapis.com/storage/v1/b/testupload-sdk/o/sdk2.txt",
  "name": "sdk2.txt",
  "bucket": "MYBUCKET",
  "generation": "1490608714382301",
  "metageneration": "1",
  "timeCreated": "2017-03-27T09:58:34.164Z",
  "updated": "2017-03-27T09:58:34.164Z",
  "storageClass": "MULTI_REGIONAL",
  "timeStorageClassUpdated": "2017-03-27T09:58:34.164Z",
  "size": "0",
  "md5Hash": "1B2M2Y8AsgTpgAmY7PhCfg==",
  "mediaLink": "https://www.googleapis.com/download/storage/v1/b/MYBUCKET/o/sdk2.txt?generation=1490608714382301&alt=media",
  "crc32c": "AAAAAA==",
  "etag": "CN33rZe29tICEAE="
}

根据documentation以上响应应为 308而不是 200 OK .

我在调用这些 API 时做错了什么?

最佳答案

第 2 步不是必需的。如果将步骤 2 替换为步骤 3,则响应将按预期返回 308 而不是 200

x-goog-resumable 仅适用于XML API,因此在使用JSON API 时应省略。

在第 1 步中,断点续传被初始化。 GCS是在初始化上传的时候生成上传ID的,所以不可能在初始化上传之前就有上传ID。

第 2 步使用 0 字节对象完成可恢复上传,因为 GCS 将其解释为要上传的数据(由于第 1 步初始化上传)。结果,第 3 步返回了第 2 步的响应。如果断点续传完成,GCS 将返回创建对象的请求的响应。

关于google-cloud-storage - 如何将文件分块上传到谷歌存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43043982/

相关文章:

machine-learning - 如何从jupyter笔记本中的Google存储桶加载mat文件

python - 将列表分块到大小 N 并添加到数据帧最终会丢失数据

AWS S3 Python 客户端的 Java 等效项 "generate_presigned_post"

amazon-web-services - S3 签名的 url 在操作期间是否过期?

python - 如何通过 Python GAE 将视频上传到 Google Cloud Storage?

firebase - 错误 : storage/object-not-found when trying to upload large image file

python - Gsutil - 如何使用 Gsutil 检查文件是否存在于 GCS 存储桶(子目录)中

Rmarkdown 内联代码内的反引号/与常用代码块的行为不一致

r - 使用 data.table 索引序列 block

go - 如何为Google存储空间创建文件大小受限的签名URL?