我要求从用户输入文件获取,该文件应该只是指定类型的图像。例如。只有JPEG
s。必须拒绝其他文件。
所以我实施了天真的基本检查文件
fileName.toLowerCase().endsWith(".jpg") || fileName.toLowerCase().endsWith(".jpeg")
因此,如果用户上传了file.png,则该文件被拒绝。但随后用户意识到,如果他们只是将file.png重命名为file.jpg,那么该文件将被上传。
有没有办法只使用JAVA SDK
没有外部罐子来检测提供的文件是否是给定类型的有效图像? (注意我还在使用JDK6)。感谢。
答案 0 :(得分:4)
进行一些天真的检查以将JPEG与PNG分开应该相对容易。根据{{3}},JPEG文件始终以FF D8
开头。然而,PNG似乎从89 50
开始,因此人们可以很容易地将两者从仅从文件中读取一两个字节进行区分。
我建议查找最重要图像类型的文件格式,以确保没有其他主流版本以FF D8
开头。但似乎不太可能。
编辑:JPEG,PNG,GIF,BMP和TIFF似乎都在文件的开头有魔术值,以区别于其他类型。
答案 1 :(得分:2)
将文件解码为jpeg并查看它是否抛出异常或返回图像?
您可以使用JDK ImageIO执行此操作(http://docs.oracle.com/javase/6/docs/api/javax/imageio/ImageIO.html)。首先获取jpeg的ImageReader,然后让该读者尝试读取图像。