在网站上上传和存储图片的最佳方式是什么?

2022-08-30 08:16:47

我不知道大型网站如何将图片保存在他们的服务器上。任何人都可以告诉我他们如何将用户上传的图片保存在他们的数据库中?

我在想,也许他们会将文件(图片)保存在某个路径中,然后只将该路径保存在databse中,对吗?

但我想这样做。这是对的吗?例如,名为 的网站。当用户上传图片时,我会创建一个用户名文件夹,并将这些图片保存在该文件夹中。www.photos.com

我相信我们可以使用.因此,当新用户上传他的图片或文件时,我想用他的名字创建一个目录。php file concepts

例如:如果用户名是john,我会在 photos.com 上创建一个这样的目录,然后在他上传图片时将所有图片保存到此目录中。这是正确的方法吗?www.photos.com/john/

我在这里没有人对将文件保存到服务器有很好的了解,所以请让我知道该怎么做?我想以正确和安全的方式做到这一点。


答案 1

所有大型网站都不会将图片保存到存储在磁盘中的数据库中。它们保存对图片在表格中位置的引用。然后从那里链接。

为什么?性能。

从数据库中提取大量内容是一个巨大的性能瓶颈。而且数据库的水平扩展性不能很好,所以这意味着一个更大的问题。所有大型网站都使用静态内容场来处理静态内容,如图像。这是不会不关心您的身份的服务器。

他们可能会问,他们如何保持照片的私密性?他们没有。

图片的链接本身就是地址和密码。让我们以Facebook为例。如果我在我的帐户上存储私人图片,您应该无法打开它。但是,只要您有正确的地址,就可以。

这张照片是私人的注意文件名

(Facebook会不时更改网址,因此链接可能会断开)10400121_87110566301_7482172_n.jpg

它是非顺序的。获取图片的唯一方法是知道它的地址。
根据以前的用户照片,您无法猜到下一张。
它有一个巨大的熵,所以即使你开始随机的疯狂猜测,你也会有大量的失败,如果你得到一张照片,你将无法从那里意识到所有者的身份,这本身就是匿名的保护。

编辑(为什么不应将图像存储在“用户名”文件夹中:
编辑后,很明显您确实打算将文件放在磁盘上而不是数据库上。此编辑涵盖了新方案。

即使您的逻辑(为每个用户创建一个文件夹)接缝更有条理,当您开始拥有许多用户和许多图片时,它也会产生问题。假设您的服务器有 1T 磁盘空间。让我们也想象一下,1T与服务器可以处理的负载或多或少是准确的。

现在你有11个用户,假设他们同时开始上传,每个用户将上传超过100GB的文件。当它们达到91GB时,每个服务器都已满,您必须开始在不同的服务器上存储图像。如果遵循该用户/文件夹结构,则必须选择其中一个用户并将其所有数据迁移到其他服务器。此外,它对不能上传超过1T文件的用户进行了硬性限制。

那么,我应该将所有文件存储在同一个文件夹中吗?
不可以,大型站点通常将文件存储在顺序文件夹(/000001/、/000002/等)中,每个文件夹具有 x 定义的文件数。这主要针对文件系统性能问题。

详细了解目录中有多少个文件太多?


答案 2

将图像存储在数据库中通常是一个坏主意(如果您的网站很受欢迎)。传统上,数据库是大多数应用程序中的主要瓶颈之一。无需加载超过必要的时间。如果镜像在文件系统中,许多http服务器(例如nginx)将最有效地为它们提供服务。

作为俄罗斯最大的社交网络,Vkontakte正是这样做的:将图像存储在文件系统中。

另一个大型社交网络实现了复杂的可缩放 blob 存储。但它不向公众开放,AFAIK。

此答案的摘要:不要在数据库中存储 Blob。


推荐