我使用NodeJS开发了一个大型Web应用程序。我允许我的用户将多个图片上传到我的Google云端存储分区。
目前,我将所有图片存储在/uploads/images/
。
我开始认为这不是最安全的方式,并且当目录有数千张图像时,可能会影响性能。它还会产生威胁,因为某些图像是私有的,它可以允许用户通过猜测唯一ID来搜索图像,例如uploads/images/29rnw92nr89fdhw.png
。
我是否最好将我的结构更改为/uploads/{user-id}/images/
之类的内容?这样每个目录只有几十个图像。虽然,目录可以处理数千个其他子目录而不会遇到性能问题吗? Google云端存储是否恰好适应了这样的问题?
答案 0 :(得分:1)
GCS实际上没有“目录”。它们是UI和命令行工具提供的一种错觉。因此,您可以将数十亿个对象放在同一个“目录”中,而不会遇到任何问题。
那里有一个附录:如果你每秒插入超过一千个物体,还有一些值得注意的注意事项。在这种情况下,您会看到避免顺序对象名称的性能优势。换句话说,按顺序快速连续上传/uploads/user-id/images/000000.jpg
到/uploads/user-id/images/999999.jpg
可能会比使用随机对象名称更慢。 GCS有documentation with more on this,但除非您每秒上传超过1000个对象,否则这不应该是一个问题。
一个好的,长的GUID应该是有效的不可思议的(或者至少不比密码或访问令牌更可猜测),但它们确实具有在不重命名图像的情况下不可撤销的缺点。一旦有人知道,他们就会永远知道它并将其泄漏给其他人。如果您需要对对象进行严格控制,则可以将它们保密,仅对项目可见,并允许用户仅通过签名URL访问它们。这为您提供了最大的灵活性和控制力,但实施起来也更加困难。