2014-01-15 52 views
3

我有要求從用戶輸入文件中獲取該文件,該文件應該只是指定類型的圖像。例如。只有JPEG s。其他文件必須被拒絕。檢測給定的文件是否爲圖像,並且是java中特定類型的有效圖像

所以我實現了天真的基本檢查文件

fileName.toLowerCase().endsWith(".jpg") || fileName.toLowerCase().endsWith(".jpeg") 

所以,如果用戶上傳file.png,該文件被拒絕。但是後來用戶意識到,如果他們只是將file.png重命名爲file.jpg,則文件將被上傳。

有沒有辦法檢測提供的文件是否爲有效圖像的給定類型只使用JAVA SDK沒有外部罐子? (注意我還在使用JDK6)。謝謝。

+0

我想這是你想要的東西: http://stackoverflow.com/questions/9643228/test-if-file-is-an-image – Ritz

+0

http://stackoverflow.com/questions/15539696/check-if-file-is-jpg – Zyga

+0

您可能想要在此重新考慮您的用戶體驗。如果圖像是JPG或PNG,它真的很重要嗎? –

回答

4

做一些簡單的檢查將JPEG與PNG分開應該相對容易。根據Wikipedia,JPEG文件始終以FF D8開頭。然而,PNG似乎從89 50開始,所以人們可以很容易地從文件中讀取一個或兩個字節來區分這兩者。

我會建議查找最重要的圖像類型的文件格式,以確保沒有其他一些主流的開始FF D8。但似乎不太可能。

編輯:JPEG,PNG,GIF,BMP和TIFF在文件開始處似乎都具有魔術值,可以將它們區分開來,形成其他類型。

+0

感謝您的回覆。首先看起來很不錯。我會嘗試。 – user3195535

2

將文件解碼爲jpeg並查看它是否拋出異常或返回圖像?

您可以使用JDK ImageIO執行此操作(http://docs.oracle.com/javase/6/docs/api/javax/imageio/ImageIO.html)。首先獲取jpeg的ImageReader,然後讓該閱讀器嘗試閱讀該圖像。

+0

感謝您的回覆。我會用你的建議作爲「備份解決方案」,因爲我認爲以這種方式使用異常通常不是最好的方法。正如一位智者告訴我的,只有在沒有其他方法可以防止異常情況發生時才使用異常處理,換句話說,只有在情況異常時才應使用異常處理。 – user3195535

+1

但是,無效的用戶輸入是有效的異常情況。 –

+2

@ user3195535你正在從字面上理解「特殊場景的例外」。決定性的一點是,應該使用異常來表示要執行的操作無法正常完成 - 請求操作的* context *對於判定異常是否適用無關緊要。如果你將自己的邏輯思考到底,只有當世界結束時才允許拋出異常。 – Durandal

相關問題