我需要上傳圖片到我的網站,做一些圖片處理(調整大小,獲取圖片大小\分辨率,轉換爲jpg格式等),然後將其嵌入到我的網頁上。 我有幾個問題:關於圖片上傳的幾個問題
- 如何檢查上傳文件是圖像?
- 哪裏更好的存儲圖像 - mssql或只是文件夾?
- 如何檢測圖像類型。 MIME信任源?
- 如何進行圖像處理。 System.Drawing是不錯的工具?
我需要上傳圖片到我的網站,做一些圖片處理(調整大小,獲取圖片大小\分辨率,轉換爲jpg格式等),然後將其嵌入到我的網頁上。 我有幾個問題:關於圖片上傳的幾個問題
如何檢查上傳文件是否爲圖像?
您可以查看上傳的文件名並使用擴展名,但這不是100%保證。任何人都可以將.exe
重命名爲.jpg
,因此沒有可靠的方法。請記住,你在服務器上得到的只是一個文件名和一個可能是任何東西的字節數組。另一種技術包括查看上傳文件的前幾個字節,並嘗試猜測它的類型,但再次不能保證。
哪裏更好的存儲圖像 - mssql或只是文件夾?
沒有確切的答案。一些更喜歡文件系統,其他SQL。我更喜歡將文件存儲在文件系統中,並只保存SQL中的路徑。此外SQL Server 2008有一個FileStream數據類型,這可能值得檢查。
如何檢測圖像類型。 MIME信任源?
再次可以使用文件擴展名,但不是100%可信。
如何進行圖像處理。 System.Drawing是不錯的工具?
是GDI +足以執行基本的圖像處理,如調整常見圖像類型的大小。
1)便宜的檢測方式是擴展。 主要是安全的方法是讀取標題的前幾個字節,看它是否與已知的圖像格式標題匹配。
2)MSSQL 2008有一個兩全其美的FileStream類型。如果你使用的是較早版本的sql server,那麼這是一個折騰。如果圖像必須可以通過多個Web服務器訪問,並且可移植性/備份是一個需要考慮的問題,那麼您必須將其放在數據庫服務器中...
如果多個Web服務器,但可移植性/備份不是問題,那麼將其存儲在NAS上。
如果單個web服務器和你知道它不會被放大,那麼在本地web服務器上的文件系統就OK了。
3)不信任任何人。參見條目1.
4)購買圖書館或找到一個開源的。它會讓你的生活更輕鬆。順便提一句,這有助於第1項和第3項。圖像上傳時,用庫打開它。如果圖書館抱怨,那麼你可以肯定它不是一個真實的圖像。
你可能檢查到plupload,看看他們在做什麼:http://www.plupload.com/
您可以檢查出我的博客文章:
使用JavaScript + ASHX處理程序異步圖片上傳。對於圖片上傳(ASHX和圖像處理) http://weblogs.asp.net/rternier/archive/2010/09/17/jquery-image-upload-amp-refresh-using-an-ashx-file-part-2.aspx
它將涵蓋了很多本,但在這裏,你去 http://weblogs.asp.net/rternier/archive/2010/08/18/jquery-image-upload-amp-refresh-using-an-ashx-file.aspx
服務器端代碼。
如何查看是否爲圖像: 正在上傳您可以檢查文件擴展名以瞭解它是什麼。上傳後,您可以檢查文件的MIME類型。
我喜歡將圖像作爲二進制存儲在數據庫中。管理起來很容易,我不需要從Web服務器硬盤讀取/寫入來獲取映像。
對圖像使用System.Drawing做任何修改。