【问题标题】:Detect if given file is image and is valid image of specific type in java检测给定文件是否是图像并且是java中特定类型的有效图像
【发布时间】:2014-02-03 16:41:11
【问题描述】:

我需要从用户输入文件中获取,该文件应该是指定类型的图像。例如。只有JPEGs。其他文件必须被拒绝。

所以我对文件实施了简单的基本检查

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

所以如果用户上传了 file.png,这个文件就会被拒绝。但是后来用户意识到,如果他们只是将file.png重命名为file.jpg,文件就会被上传。

有没有办法检测提供的文件是否是给定类型的有效图像,只使用JAVA SDK 而不使用外部 jar? (注意我仍在使用 JDK6)。谢谢。

【问题讨论】:

标签: java image file-type


【解决方案1】:

进行一些简单的检查以将 JPEG 与 PNG 分开应该相对容易。根据Wikipedia,JPEG 文件总是以FF D8 开头。然而,PNG 似乎以 89 50 开头,因此只需从文件中读取一两个字节即可轻松区分两者。

我建议查找最重要的图像类型的文件格式,以确保没有其他以FF D8 开头的主流格式。不过似乎不太可能。

编辑:JPEG、PNG、GIF、BMP 和 TIFF 似乎都在文件的开头有一个神奇的值来区分它们与其他类型。

【讨论】:

  • 感谢您的回复。似乎是一个很好的起点。我会试试的。
【解决方案2】:

将文件解码为jpeg,看看是抛出异常还是返回图片?

您可以使用 JDK ImageIO 来执行此操作 (http://docs.oracle.com/javase/6/docs/api/javax/imageio/ImageIO.html)。首先获取 jpeg 的 ImageReader,然后让该阅读器尝试读取图像。

【讨论】:

  • 感谢您的回复。我会将您的建议用作“备份解决方案”,因为我认为以这种方式使用异常通常不是最好的方法。正如一位智者所说,只有在没有其他方法可以防止异常发生时才应该使用异常处理,也就是说,只有在异常情况下才应该使用异常。
  • 但是无效的用户输入是一种有效的例外情况。
  • @user3195535 你把“特殊情况的例外”理解得太字面意思了。决定性的一点是,应该用异常来表示要执行的操作不能正常完成——请求该操作的context与决定无关例外是否合适。如果你认为你的逻辑贯穿始终,那么只有在世界末日时才允许抛出异常。
  • @Durandal 我同意你的评论。我的评论有点不同。也许小例子会让我的想法清楚。考虑使用 File 进行操作。我更喜欢使用 file.exists() 测试而不是处理 FileNotFoundException 因为我可以通过测试该存在来防止引发此异常。
猜你喜欢
  • 2011-11-11
  • 2016-07-03
  • 1970-01-01
  • 2020-12-04
  • 2010-10-27
  • 2011-03-28
  • 1970-01-01
相关资源
最近更新 更多