最近做图片下载和图片上传时被图片格式给折腾死了,这里总结一下如何验证验证一个文件是否图片以及获取其图片格式的方法,供大家参考!

通常情况下,验证一个文件是否图片,可以通过以下三种方式:

1、判断文件的扩展名是否是要求的图片扩展名
      这种判断是用得比较多的一种方式,不过这种方式非常的不妥,别人稍微的把一个不是图片的文件的扩展名修改为图片的扩展名,就绕开了你的这种校验,如果这上传的文件是shell、php或者jsp,那你的网站基本上可以说就在别人的手里面了。
不过这种判断方式也不是完全没有用,我们可以把它放在判断图片的最外层,如果一个文件连扩展名都不是我们所要求的图片扩展名,那就根本不用后面的内容格式检查了,从一定程度上说,对减少服务器的压力还是有一定的帮助,否则所有的文件都等上传完后成后再通过服务器去判断,那会在一定程度上浪费器资源的。
2、根据文件的前面几个字节,即常说的魔术数字进行判断,不同文件类型的开头几个字节,可以查看我的另外一篇专站介绍:表示不同文件类型的魔术数字。

但是这种判断方式也是非常不靠谱的,因为他只能够验证文件的前面几个字节,如此时有人把一个可执行的PHP文件的扩展名修改为PNG,然后再在前面补上”89 50″两个字节,就又绕开了这种验证方式。

3、使用javax.imageio.ImageIO ,如果能获取到相关联的ImageReader则说明其为图片,并可进一步获取到图片的格式等信息。

上述 1、2 方法的 实现可参考 这篇博客:使用JAVA如何对图片进行格式检查以及安全检查处理,我这里只说一下第三种方法。

这里做测试的图片文件 格式被改为 png,但通过本方法检查发现其格式是 JPEG的,示例代码如下:

package com.ricky.java.common.download.test;import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;public class ImageDemo {/*** @param args*/public static void main(String[] args) {File file = new File("E:/download_test/pics/1c/1cd5v0uya36wg0rf4fu39dtym.png");boolean result = isImage(file);System.out.println("result="+result);getExtension(file);}public static void getExtension(File file) {ImageInputStream iis = null;try {iis = ImageIO.createImageInputStream(file);Iterator<ImageReader> iter = ImageIO.getImageReaders(iis); if(iter.hasNext()){System.out.println("扩展名:"+iter.next().getFormatName());}} catch (IOException e) {e.printStackTrace();}finally{if(iis!=null){try {iis.close();} catch (IOException e) {e.printStackTrace();}}}}public static boolean isImage(File resFile){ImageInputStream iis = null;try {iis = ImageIO.createImageInputStream(resFile);Iterator<ImageReader> iter = ImageIO.getImageReaders(iis); if (iter.hasNext()) {//文件不是图片 return true;} } catch (IOException e) {e.printStackTrace();}finally{if(iis!=null){try {iis.close();} catch (IOException e) {e.printStackTrace();}}}return false;}}

JAVA 图片格式检查方法相关推荐

  1. java图片格式转化(例如jpg格式转化png)

    转载自  java图片格式转化(例如jpg格式转化png) import java.awt.image.BufferedImage; import java.io.File; import java. ...

  2. Java——图片格式转换

    利用java开发中遇到图片转换格式需求怎么办,利用以下方法轻松搞定. 1.利用流的方式,ImageIO调用write方法写出,选写需要的图片格式,例如"png,jpg等" /*** ...

  3. 图片怎么转为html格式,Win10如何保存网页为图片?Html页面转为图片格式的方法...

    Win10如何保存网页为图片?实际上,如果用户安装过一些虚拟打印机可以直接打印为图片格式(见方法一),当然,如果用户没有安装任何虚拟打印机,则可以使用直接保存的方法将其保存为图片,该操作需要第三方浏览 ...

  4. java 图片格式转化 wmf,emf -> svg,png

    在一次调试考试系统bug时遇到的问题,功能是word录入一些题目,解析其中的数学公式转为浏览器可显示的图片. 正常的最新版的word插入的公式是DocumentFormat.OpenXml.Math. ...

  5. nodejs+html转换pdf,Nodejs中使用phantom将html转为pdf或图片格式的方法

    最近在项目中遇到需要把html页面转换为pdf的需求,并且转换成的pdf文件要保留原有html的样式和图片.也就是说,html页面的图片.表格.样式等都需要完整的保存下来. 最初找到三种方法来实现这个 ...

  6. nodejs+html转换pdf,Nodejs中使用phantom将html转为pdf或图片格式的方法.pdf

    Nodejs中中使使用用phantom将将html转转为为pdf或或图图片片格格式式的的方方法法 最近在项目中遇到需要把html页面转换为pdf 的需求,并且转换 的pdf文件要保留原有html的样式 ...

  7. java 图片格式校验_(转载)Java对上传的图片进行格式校验以及安全性校验

    文章目录 前言 判断上传的是否是图片 通过后缀名进行判断 通过文件头 通过ImageIO判断 图片文件的安全检查处理 给图片加水印 前言 在web开发中,肯定会有一些图片上传的功能,如果仅仅是通过页面 ...

  8. java 时间格式检查

    检查日期需求: 日期格式如:20120101或者2012-01-01 直接用SimpleDateFormat sdf = new SimpleDateFormat("YYYYMMDD&quo ...

  9. java 图片格式转化 wmf,emf 转 svg,png

    自己用到记录下,方便下次使用. wmf-svg-png 相关maven依赖如下 <dependency><groupId>org.apache.xmlgraphics</ ...

  10. android 判断图片的格式的,android判断文件是否是图片文件的方法

    判断一个文件是否是图片文件的方法,采用BitmapFactory去decode然后根据返回的Options参数来确定: public static boolean isImageFile(String ...

最新文章

  1. haslayout详解
  2. 元宇宙企业大比拼:云宇宙数据中台:iwemeta.com
  3. 使用约束控件创建界面
  4. zk中的Datebox中得到Timestamp
  5. [转]Using Named Pipes (FIFOs) with Bash
  6. ★★iPhone越狱后必装软件和一些心得教程,送给广大的小白们,希望你们能从小白变成“小黑”★★
  7. Hyperledger Fabric CA中文文档
  8. H5+CSS3移动商城界面.七天从零实战课程-会员_登录
  9. 自学转行3年经验,终入职阿里!
  10. 用python实现淘宝毫秒级秒!! 天猫淘宝的抢购完美实现 而且说实话有很多人需要它。 每次在抢购前的无法提交订单导致很多买家无法购买。 今天我教给大家如何更好快速实现你的购买愿望! 教程如下!请仔
  11. Ubuntu 16.04 小键盘数字键盘开机自动启动
  12. 算法导论课后题和思考题 第3章
  13. python医药数据分析_Python数据分析案例-药品数据分析案例
  14. 顶会中的对比学习论文-2
  15. 网络安全现状与未来蓝图||建立高效的网络安全体系
  16. 安卓微信名字彩色字体怎么设置? 微信名字特效设置教程
  17. Windows常用快捷键及运行命令
  18. 反激变换器变压器设计总结
  19. postgresql的时间处理函数,时间格式化函数
  20. 企业自己如何快速开发一个简单实用的CRM客户管理系统?

热门文章

  1. js 中的 let 关键字
  2. 2513: 小勇学分数(公约数问题)
  3. Pwned Vulnhub
  4. python登录系统账号检测_使用Python脚本检测邮件账户密码是否被泄漏,提高你的账户安全性...
  5. EXCEL慢的解决方法
  6. 华硕2020年显卡_显卡涨价?2020年12月不溢价电脑装机配置推荐——华硕3070 DUAL雪豹篇...
  7. 2018年春季学期《软件工程》教学总结
  8. 程序人生 - 杭州阶梯摇号是什么意思?
  9. 用 Python 切换输入法
  10. 我怎样学会英语的--钟道隆逆向英语学习法1