图片上传目录结构最佳做法?
Best image upload directory structure practises?
我用 NodeJS 开发了一个大型 Web 应用程序。我允许我的用户将多张图片上传到我的 Google Cloud Storage 存储桶。
目前,我将所有图像存储在 /uploads/images/
的同一目录下。
我开始认为这不是最安全的方法,并且当目录包含数千张图像时可能会影响性能。它还会带来威胁,因为某些图像是私有的,并且它可能允许用户通过猜测唯一 ID 来搜索图像,例如 uploads/images/29rnw92nr89fdhw.png
.
我最好将我的结构更改为 /uploads/{user-id}/images/
之类的结构吗?这样每个目录只有几十张图片。虽然,一个目录可以处理数千个其他子目录而不会遇到性能问题吗? Google 云存储恰好可以解决此类问题吗?
GCS 实际上并没有 "directories." 它们是 UI 和命令行工具提供的一种错觉。因此,您可以将数十亿个对象放入同一个 "directory" 而不会 运行 出现任何问题。
这里有一个附录:如果您每秒插入超过一千个对象,则还有一些额外的警告值得注意。在这种情况下,您会看到避免顺序对象名称带来的性能优势。换句话说,按顺序快速连续上传 /uploads/user-id/images/000000.jpg
到 /uploads/user-id/images/999999.jpg
,可能比使用随机对象名称慢。 GCS 有 documentation with more on this,但这应该不是问题,除非您每秒上传超过 1000 个对象。
一个漂亮的长 GUID 应该是有效的不可猜测的(或者至少不比密码或访问令牌更容易猜测),但它们确实有一个缺点,即在不重命名的情况下是不可撤销的图片。一旦有人知道,他们就会永远知道,并且可以泄露给其他人。如果您需要严格控制您的对象,您可以将它们全部设为私有且仅对您的项目可见,并允许用户仅通过签名 URL 访问它们。这为您提供了最大的灵活性和控制力,但也更难实施。
我用 NodeJS 开发了一个大型 Web 应用程序。我允许我的用户将多张图片上传到我的 Google Cloud Storage 存储桶。
目前,我将所有图像存储在 /uploads/images/
的同一目录下。
我开始认为这不是最安全的方法,并且当目录包含数千张图像时可能会影响性能。它还会带来威胁,因为某些图像是私有的,并且它可能允许用户通过猜测唯一 ID 来搜索图像,例如 uploads/images/29rnw92nr89fdhw.png
.
我最好将我的结构更改为 /uploads/{user-id}/images/
之类的结构吗?这样每个目录只有几十张图片。虽然,一个目录可以处理数千个其他子目录而不会遇到性能问题吗? Google 云存储恰好可以解决此类问题吗?
GCS 实际上并没有 "directories." 它们是 UI 和命令行工具提供的一种错觉。因此,您可以将数十亿个对象放入同一个 "directory" 而不会 运行 出现任何问题。
这里有一个附录:如果您每秒插入超过一千个对象,则还有一些额外的警告值得注意。在这种情况下,您会看到避免顺序对象名称带来的性能优势。换句话说,按顺序快速连续上传 /uploads/user-id/images/000000.jpg
到 /uploads/user-id/images/999999.jpg
,可能比使用随机对象名称慢。 GCS 有 documentation with more on this,但这应该不是问题,除非您每秒上传超过 1000 个对象。
一个漂亮的长 GUID 应该是有效的不可猜测的(或者至少不比密码或访问令牌更容易猜测),但它们确实有一个缺点,即在不重命名的情况下是不可撤销的图片。一旦有人知道,他们就会永远知道,并且可以泄露给其他人。如果您需要严格控制您的对象,您可以将它们全部设为私有且仅对您的项目可见,并允许用户仅通过签名 URL 访问它们。这为您提供了最大的灵活性和控制力,但也更难实施。