因為這只是個人文件,所以你可以將它們存儲在S3中。
為了確保文件上傳的安全性,只需在上傳之前檢查文件的MIME類型,以確定您所選擇的任何存儲。
http:/php.net/手冊/en/Function.MIME-Content-type.php
只需快速檢查上傳的文件:
$mime = mime_content_type($file_path);if($mime == 'image/jpeg') return true;
別小題大作!
將文件保存在數(shù)據(jù)庫中是不好的做法,它應(yīng)該是您的最后資源。S3對于許多用例來說都是很棒的,但是對于高使用率來說,它是昂貴的,本地文件應(yīng)該只用于內(nèi)部網(wǎng)和不可公開的應(yīng)用程序。
在我看來,去S3吧。
Amazon的SDK很容易使用,您可以獲得1GB的免費存儲進行測試。您也可以使用自己的服務(wù)器,只需將其保留在數(shù)據(jù)庫之外即可。
在文件系統(tǒng)上存儲圖像的解決方案
假設(shè)你有100.000用戶,每個用戶都有10張照片。如何在本地存儲?問題:Linux文件系統(tǒng)在幾十萬張映像后中斷,因此您應(yīng)該使文件結(jié)構(gòu)避免這種情況。
解決辦法:使文件夾名為‘a(chǎn)bs(userid/1000)*1000’/userid
這樣,當(dāng)用戶使用id 989787時,它的圖像將存儲在文件夾989000/989787/img1.jpeg 989000/989787/img2.jpeg 989000/989787/img3.jpeg上。
這是一種為百萬用戶存儲圖像的方法,它不會破壞Unix文件系統(tǒng)。
儲藏室的尺寸如何?
上個月,我不得不為我從事的電子商務(wù)壓縮了130萬個jpegs。上傳圖像時,使用圖像壓縮,使用無損標(biāo)志和80%的質(zhì)量。這將刪除不可見的像素,并優(yōu)化您的存儲。由于我們的圖像從40x40(縮略圖)到1500x1500(縮放圖像),我們平均有700x700張圖像,乘以130萬張圖像,填充了大約120 GB的存儲空間。
所以,是的,可以將其全部存儲在您的文件系統(tǒng)中。
當(dāng)事情開始變慢時,你會雇傭一個CDN。
那該怎么辦?
CDN位于您的映像服務(wù)器的前面,每當(dāng)CDN被請求要一個文件時,如果它在它的存儲中找不到它(緩存丟失),它將從您的圖像服務(wù)器復(fù)制它。稍后,當(dāng)CDN再次被請求時,它將從它自己的緩存中傳遞圖像。
這樣就不需要代碼遷移到CDN映像傳遞,您所需要做的就是更改站點中的URL并雇用CDN,這對于S3桶來說是一樣的。
這不是一種便宜的服務(wù),但它比CloudFront便宜,當(dāng)你到需要它的時候,你可能買得起它。