由于只是个人文件,您可以将它们存储在S3中。
为了确保文件上传安全,只需在上传之前检查文件的mime类型,即可选择所需的存储空间。
http://php.net/manual/zh/function.mime-content-type.php
只需对上传的文件进行快速检查:
$mime = mime_content_type($file_path); if($mime == 'image/jpeg') return true; 没什么大不了的!
将文件保留在数据库中是不好的做法,这应该是您的最后资源。S3非常适合许多用例,但对于高使用率而言则很昂贵,并且本地文件应仅用于Intranet和非公共可用的应用程序。
我认为,请转到S3。
亚马逊的sdk易于使用,您可以免费使用1GB的存储空间进行测试。您也可以使用自己的服务器,只是将其保留在数据库之外。
在文件系统上存储图像的解决方案
假设您有100.000个用户,每个用户都有10张图片。您如何处理本地存储? 问题:成千上万个映像后,Linux文件系统中断,因此您应该使文件结构避免这种情况
解决方案: 将文件夹名称设置为“ abs(userID / 1000)* 1000” / userID
这样,当您的用户ID为989787时,其图像将存储在文件夹989000/989787 / img1.jpeg 989000/989787 / img2.jpeg 989000/989787 / img3.jpeg上
这样就可以为一百万个用户存储图像而不会破坏UNIX文件系统。
存储大小如何?
上个月,我不得不为自己从事的电子商务压缩130万jpeg。上传图像时,请使用具有无损标记和80%质量的imagick进行压缩。这将消除不可见的像素并优化存储。由于我们的图片从40x40(缩略图)到1500x1500(缩放图片)不等,因此我们平均获得700x700的图片,是130万张图片的总和,约占120GB的存储空间。
是的,可以将它们全部存储在文件系统中。
当事情开始变慢时,您可以租用CDN。
那将如何工作?
CDN位于映像服务器的前面,每当CDN被要求提供文件时,如果在其存储中找不到文件(缓存未命中),它将从映像服务器复制它。稍后,当再次请求CDN get时,它将从其自己的缓存中传递图像。
这样,无需任何代码即可迁移到CDN映像交付,您所需要做的就是更改站点中的URL并租用CDN,这与S3存储桶的工作原理相同。
它不是一项便宜的服务,但是比cloudfront便宜,而且当您需要它时,您可能可以负担得起。来源:stack overflow