我不知道大型网站如何将图片保存在他们的服务器上。有谁能告诉我他们如何保存用户在他们的数据库中上传的图片?
我在想,也许他们只是将文件(图片)保存在某个路径中,只是在数据库中保存该路径就是这样吗?
但我想这样做。这是正确的吗?例如,一个名为www.photos.com
的网站。当用户上传图片时,我会创建一个用户名的文件夹,并将这些图片保存在该文件夹中。
我相信我们可以使用php file concepts
创建一个目录。因此,当新用户上传他的图片或文件时,我想创建一个名为他的目录。
示例:如果用户名是john,我会在photos.com www.photos.com/john/
上创建这样的目录,然后在上传图片时将所有图片保存到此目录中。这是正确的方法吗?
我这里没有人知道将文件保存到服务器,所以请告诉我怎么做?我想以正确和安全的方式做到这一点。
答案 0 :(得分:166)
所有大型网站都不会将图片保存到数据库,它们会将它们存储在磁盘中。 它们保存了对图片在表格中位置的引用。然后从那里链接。
为什么呢?性能
从数据库中提取大量内容是一个巨大的性能瓶颈。并且数据库不能横向扩展,因此这意味着更大的问题。所有大型网站都使用静态内容服务器场来处理静态内容,例如图像。那些不关心你身份的服务器。
他们如何保持你可能会问的照片真的私密?他们没有。
图片的链接本身就是地址和密码。我们以Facebook为例。如果我在我的帐户上存储私人照片,则您无法打开它。但是,只要你有正确的地址,你就可以。
This picture is private。请注意文件名
10400121_87110566301_7482172_n.jpg
(Facebook会不时更改网址,因此链接可能会被破坏)
这是非顺序的。获得图片的唯一方法是知道它的地址 根据之前的用户照片,您无法猜测下一张用户照片 它有一个巨大的熵,所以即使你开始随机猜测你会有大量的失败,如果你做了一个图片,你将无法从那里,实现所有者的身份,本身就是匿名保护。
编辑(为什么不应将图像存储在“用户名”文件夹中
编辑后,很明显您确实打算将文件放在磁盘上,而不是放在数据库上。此编辑涵盖新方案。
即使您的逻辑(为每个用户创建一个文件夹)接缝更加有条理,但当您开始拥有许多用户和许多图片时,它会产生问题。想象一下,您的服务器有1T磁盘空间。并且我们还可以想象1T对于服务器可以处理的负载来说或多或少是准确的。
现在您有11个用户,假设他们同时开始上传,每个用户都会上传超过100GB的文件。当它们各达到91GB时,服务器已满,您必须开始在不同的服务器上存储图像。如果遵循该用户/文件夹结构,则必须选择其中一个用户并将其所有数据迁移到其他服务器。此外,它对无法在文件中上传超过1T的用户设置了硬限制。
我应该将所有文件存储在同一个文件夹中吗?
不,大型网站通常将文件存储在顺序文件夹(/ 000001 /,/ 000002 /等)中,每个文件夹具有x定义的文件数。这主要是针对文件系统性能问题。
答案 1 :(得分:3)
最好通过将图像物理上传到服务器,然后在数据库中记录文件位置和图像细节来实现图像管理。随后,可以将搜索表单配置为允许用户进行文本搜索,部件号搜索或其他查询。可以编写PHP脚本以根据表中的数据生成有效的HTML图像标记。
将图像上传到MySQL™BLOB字段是一个坏主意,如果图像比缩略图大得多,则这种图像数据通常是有问题的。如果图像很大,您最终可能必须一次复制/粘贴一个SQL INSERT语句(进入phpMyAdmin)。如果图像很大并且文本编辑器将SQL INSERT语句分成两行,您将永远无法恢复图像。
答案 2 :(得分:3)
这是正确的做法
是。
我建议使用的唯一不是名字而是id
www.photos.com/albums/1234/
对于首发来说是可以的。