2014-01-15 31 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

相关问题