如何为 Google 存储创建文件大小有限的已签名 URL?

How to create a signed URL with limited file size for Google Storage?

我正在尝试创建签名上传 URL,以便客户端可以将文件直接上传到 Google 存储桶,我想防止用户上传大文件。因此,我想定义可以通过官方 Go SDK 签名 URL 上传的最大文件大小。不幸的是,我找不到任何例子。这可能吗?您如何将文件大小限制为 1mb?

您正在寻找 storage.GenerateSignedPostPolicyV4,它允许您通过 PostPolicyV4Options https://cloud.google.com/storage/docs/authentication/signatures#policy-document

设置政策文档
storage.GenerateSignedPostPolicyV4("my-bucket", "my-object.txt", &storage.PostPolicyV4Options{
        Conditions: []storage.PostPolicyV4Condition{
            storage.ConditionContentLengthRange(0, 1<<20),
        },
})

policy document 允许您更好地控制要上传到云存储的对象,使用此功能,您可以控制每次上传必须满足的一系列条件。

既然你需要控制你需要上传的对象的大小我建议你看看这个例子指出here:

{"expiration": "2020-06-16T11:11:11Z",
 "conditions": [
  ["starts-with", "$key", ""],
  {"bucket": "travel-maps"},
  {"success_action_redirect": "http://www.example.com/success_notification.html"},
  ["eq", "$Content-Type", "image/jpeg"],
  ["content-length-range", 0, 1000000],
  {"x-goog-algorithm": "GOOG4-RSA-SHA256"},
  {"x-goog-credential": "example_account@example_project.iam.gserviceaccount.com/20191102/auto/storage/goog4_request"},
  {"x-goog-date": "20191102T043530Z"}
  ]
}

如您所见,字段“content-length-range”, 0, 1000000] 不允许大于 1Mb 的文档。