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

nik*_*iko 55 php file-upload

我不知道大型网站如何将图片保存在他们的服务器上.有谁能告诉我他们如何保存用户在他们的数据库中上传的图片?

我在想,也许他们只是将文件(图片)保存在某个路径中,只是在数据库中保存该路径就是这样吗?

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

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

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

我这里没有人知道将文件保存到服务器,所以请让我知道如何做到这一点?我想以正确和安全的方式做到这一点.

Fra*_*kie 178

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

为什么?性能.

从数据库中提取大量内容是一个巨大的性能瓶颈.并且数据库不能横向扩展,因此这意味着更大的问题.所有大型网站都使用静态内容服务器场来处理静态内容,例如图像.那些不关心你身份的服务器.

他们如何保持你可能会问的照片真的私密?他们没有.

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

这张照片是私人的.注意文件名
10400121_87110566301_7482172_n.jpg
(facebook会不时更改网址,以免链接被破坏)

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

编辑(为什么你不应该将图像存储在"用户名"文件夹中:
编辑后,你明确表示你有意将文件放在磁盘而不是数据库上.这个编辑涵盖了新的场景.

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

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

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

更多关于目录中有多少文件太多了?

  • BRILLIANT解释.正是我在寻找,谢谢. (19认同)
  • 谢谢弗兰基,这确实很清楚。但是还有另一种方式让我更有趣:将图片存储在特定的图片存储提供程序上。 (2认同)

Ser*_*sev 6

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

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

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

回答摘要:不要在数据库中存储blob.