【发布时间】:2014-10-10 18:06:16
【问题描述】:
在 Google Cloud Storage 上,我希望 PUBLIC (allUsers) 能够上传新文件和下载现有文件,但我不希望 PUBLIC 能够覆盖现有文件。
背景:上传和下载 URL 通常由我自己的应用程序确定。所以在正常情况下没有问题,因为应用程序保证 URL 在写入时始终是唯一的。但是恶意用户可能会破解我的应用程序,然后可能会将文件(错误)上传到我的云存储并覆盖现有文件(非常糟糕)。
我知道我可以通过 App Engine 代理或使用签名 URL 来解决这个问题,由于时间限制,我试图避免这种情况。及时处理至关重要,因为我的应用程序(几乎)实时处理文件,而处理两个连续请求的额外延迟仅为 1,000 毫秒太长了。
是否可以配置云存储,以防在上传过程中遇到已经存在的文件时返回错误,例如:
存储桶:PUBLIC 具有 WRITE 访问权限 单个文件:PUBLIC 具有读取权限
这行得通吗?如果桶和文件 ACL 矛盾,GCS 会发生什么?在上面的示例中,存储桶将允许写入访问,但如果上传访问具有只读访问权限的现有文件,GCS 是否会接受此类请求,或者 GCS 是否会认为该文件此时已不存在并将其替换为新内容?
非常感谢任何其他可能有效的方法。
【问题讨论】:
-
时间问题很有趣。您的服务器是否可以在需要之前分发多个签名 URL?
-
是的@Brandon,谢谢你的想法。我也一直在考虑这个问题,如果没有其他问题,我可能会使用这条路线。
-
我终于同意了您提前保留多个签名 URL 的建议。尽管签名需要相当多的 CPU 负载,但效果很好,但到目前为止,这似乎是唯一可行的解决方案。 [要收集您的积分@BrandonYarbrough,请发布答案,以便我确认它是正确的。]
标签: google-app-engine google-cloud-storage