目标
我们希望用户能够将图片上传到 Google Cloud Storage。
问题
我们可以通过我们的服务器作为中间人间接实现这一点——首先,用户上传到我们的服务器,然后我们的特权服务器可以上传到 Cloud Storage。
但是,我们认为这不必要地慢,而是希望用户直接上传到 Cloud Storage。
建议的解决方案
为了实现直接上传,我们生成一个Signed URL在我们的服务器上。签名 URL 指定过期时间,并且只能与 HTTP PUT 动词一起使用。用户可以请求签名 URL,然后(仅在有限的时间内)将图像上传到签名 URL 指定的路径。
解决方案有问题
有什么方法可以强制执行最大文件上传大小吗?显然,我们希望避免用户在我们期望 <1MB 文件时尝试上传 20GB 文件。
这似乎是一个明显的漏洞,但我不知道如何在仍然使用 SignedURLs 的情况下解决它。
似乎有一种方法可以使用政策文档 (Stack Overflow answer) 来做到这一点,但这个问题现在已有 2 年多了。
最佳答案
对于今天查看答案的所有人,请注意 link
x-goog-content-length-range:0,25000
是将上传大小限制在 0 到 25000 字节 Cloud Storage 之间的方法。
X-Upload-Content-Length
将不起作用,您仍然可以上传更大的文件
关于http - Google Cloud Storage 签名 URL——如何指定最大文件大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45812595/