java判断上传文件是否为Mp4文件

本文介绍了一种Java方法,通过字节流方式检测上传文件是否为有效的MP4视频,避免了仅依赖后缀名可能的误判,并解释了InputStream的特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直接判断后缀名会有漏洞,比如一个文本文件后缀名改成mp4

所以需要使用字节流的方式判断是否为视频文件

	/**
	 * 根据文件字节流,判断文件是否为mp4视频文件
	 * @param file 上传的文件
	 * @throws RuntimeException 如果不是mp4文件则抛出异常
	 * */
	private void isMp4Video(MultipartFile file) throws RuntimeException{
			if(!file.isEmpty()){
				InputStream in = null;
				try {
					in = file.getInputStream();
					StringBuilder stringBuilder = new StringBuilder();
					byte [] bb = new byte[3];
					in.read(bb,0,bb.length);
					for(int j=0 ; j<bb.length;j++){
						int x = bb[j] & 0xFF;
						String a = Integer.toHexString(x);
						if(a.length()<2){
							stringBuilder.append(0);
						}
						stringBuilder.append(a);
					}
					if(!stringBuilder.toString().equals("000000")){
					  String fileName = file.getOriginalFilename();
					  throw  new RuntimeException(fileName+"不是正确的mp4文件!");
					}
				} catch (IOException e) {
					e.printStackTrace();
				}finally {
					try {
						if(in!=null){
							in.close();
						}
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
	}

注:同一个Inputstream对象只能read()一次。

       当第二次read()的时候,会接着从第一次read()的结尾继续读,而不是从头开始读。

       所以以上工具类适合单独拿出来封装

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值