Java上传图片格式验证

        搞旺旺Space两个多月了,终于预发布了,如果没问题就等待正式发布了。在这个项目中我负责的是图片的上传,客户端不是我搞的,服务端的代码是我写的,虽然还需要调用图片存储接口来完成图片的存储工作。在搞图片上传最开始的就是图片格式的验证,最开始只是简单的根据后缀名来验证,但发现不安全,又改用文件流来验证,发现性能不好,最后采用的是文件头来验证,虽说没有前两个的问题,但是因为图片格式太多,不能穷举,还是在旺旺客户端牛P张世长的帮助下,完善了一下验证的格式,勉强可以满足90%的图片验证,下面就是验证逻辑:

public static boolean checkImageTypeVailable(File file) {
		if (file == null) {
			return false;
		}
		try {
			byte[] imgContent = FileUtils.readFileToByteArray(file);
			int len = imgContent.length;
			byte n1 = imgContent[len - 2];
			byte n2 = imgContent[len - 1];
			byte b0 = imgContent[0];
			byte b1 = imgContent[1];
			byte b2 = imgContent[2];
			byte b3 = imgContent[3];
			byte b4 = imgContent[4];
			byte b5 = imgContent[5];
			byte b6 = imgContent[6];
			byte b7 = imgContent[7];
			byte b8 = imgContent[8];
			byte b9 = imgContent[9];
			
			//GIF(G I F 8 7 a)
			if (b0 == (byte)'G' && b1 == (byte)'I' && b2 == (byte)'F' && b3 == (byte)'8' && b4 == (byte)'7' && b5 == (byte)'a') {
				return true;
			//GIF(G I F 8 9 a)
			} else if (b0 == (byte)'G' && b1 == (byte)'I' && b2 == (byte)'F' && b3 == (byte)'8' && b4 == (byte)'9' && b5 == (byte)'a') {
				return true;
			//PNG(89 P N G 0D 0A 1A)
			}else if (b0 == -119 && b1 == (byte)'P' && b2 == (byte)'N' && b3 == (byte)'G' && b4 == 13 && b5 == 10 && b6 == 26) {
				return true;
			//JPG JPEG(FF D8 --- FF D9)
			} else if (b0 == -1 && b1 == -40 && n1 == -1 && n2 == -39){
				return true;
			} else if (b6 == (byte)'J' && b7 == (byte)'F' && b8 == (byte)'I' && b9 == (byte)'F'){
				return true;
			} else if (b6 == (byte)'E' && b7 == (byte)'x' && b8 == (byte)'i' && b9 == (byte)'f'){
				return true;
			//BMP(B M)
			} else if (b0 == (byte)'B' && b1 == (byte)'M') {
				return true;
			}else {
				return false;
			}
		} catch (ArrayIndexOutOfBoundsException e) {
			return false;
		} catch (IOException e) {
			return false;
		}
	}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值