【问题标题】:Best image upload directory structure practises?最好的图片上传目录结构练习?
【发布时间】:2016-06-29 06:54:04
【问题描述】:

我使用 NodeJS 开发了一个大型 Web 应用程序。我允许我的用户将多张图片上传到我的 Google Cloud Storage 存储分区。

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

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

我最好将我的结构改为/uploads/{user-id}/images/ 之类的东西吗?这样每个目录只有几十个图像。虽然,一个目录可以处理数千个其他子目录而不会遇到性能问题吗? Google Cloud Storage 是否恰好可以解决此类问题?

【问题讨论】:

    标签: node.js image file-upload google-cloud-storage


    【解决方案1】:

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

    这里有一个附录:如果您每秒插入超过一千个对象,还有一些额外的注意事项值得注意。在这种情况下,您会发现避免使用顺序对象名称会带来性能优势。换句话说,按顺序快速连续上传/uploads/user-id/images/000000.jpg/uploads/user-id/images/999999.jpg 可能比使用随机对象名称要慢。 GCS 有 documentation with more on this,但除非您每秒上传超过 1000 个对象,否则这不是问题。

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

    【讨论】:

    • @fizzix - 我添加了一个关于高流量用户的警告,以防您打算使用此建议每秒上传超过一千张图片。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-07
    • 2021-07-15
    • 2013-10-11
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多