Node.js 最佳图片上传目录结构实践?

Node.js 最佳图片上传目录结构实践?,node.js,image,file-upload,google-cloud-storage,Node.js,Image,File Upload,Google Cloud Storage,我用NodeJS开发了一个大型web应用程序。我允许我的用户将多个图像上传到我的谷歌云存储桶 目前,我将所有图像存储在相同的/uploads/images/目录下 我开始认为这不是最安全的方法,并且可能会在以后目录有数千个图像时影响性能。它还带来了一个威胁,因为有些图像是私有的,它可能允许用户通过猜测唯一的ID来搜索图像,例如uploads/images/29rnw92nr89fdhw.png 我最好将我的结构改为/uploads/{user id}/images/?这样,每个目录只有几十个图像

我用NodeJS开发了一个大型web应用程序。我允许我的用户将多个图像上传到我的谷歌云存储桶

目前,我将所有图像存储在相同的
/uploads/images/
目录下

我开始认为这不是最安全的方法,并且可能会在以后目录有数千个图像时影响性能。它还带来了一个威胁,因为有些图像是私有的,它可能允许用户通过猜测唯一的ID来搜索图像,例如
uploads/images/29rnw92nr89fdhw.png


我最好将我的结构改为
/uploads/{user id}/images/
?这样,每个目录只有几十个图像。尽管如此,一个目录可以处理数千个其他子目录而不会出现性能问题吗?谷歌云存储能适应这样的问题吗?

GCS实际上没有“目录”。它们只是一种错觉,用户界面和命令行工具提供了一种精确的功能。因此,您可以将数十亿个对象放在同一个“目录”中,而不会遇到任何问题

这里有一个附录:如果每秒插入一千多个对象,那么还有一些额外的注意事项值得注意。在这种情况下,您将看到避免连续对象名称的性能优势。换句话说,通过
/uploads/user id/images/000000.jpg
按顺序快速连续地上传
/uploads/user id/images/999999.jpg
,可能比使用随机对象名要慢。地面军事系统有,但这不应该是一个问题,除非你上传超过每秒1000个对象


一个漂亮的长GUID应该是有效的不可使用的(或者至少不会比密码或访问令牌更容易猜测),但是它们的缺点是不可撤销,而无需重命名映像。一旦有人知道了,他们就永远知道了,并且可能会泄露给别人。如果您需要对对象进行严格控制,您可以将它们都保持为私有的,并且只对您的项目可见,并且允许用户仅通过签名的URL访问它们。这为您提供了最大的灵活性和控制能力,但也更难实现。

@fizzix-我添加了一个关于流量非常高的用户的警告,以防您计划使用此建议每秒上传1000多张图像。