java判断文件是否可运行_java文件上传判断是否重复,不需要文件请求上去就能判断...

java文件上传判断是否重复,不需要文件请求上去就能判断

xmh

2019年11月22日 pm22:46

编程技术,

Java,

阅读 1222

进来看这篇文章的朋友,应该都有做过文件上传的业务,也弄了文件重复的问题。通常的做法就是:

使用 MD5 消息摘要算出 文件摘要,作为文件名,判断重复的时候,去数据库比较一下。

但有没有发现一个问题就是,文件拿到服务器才能判断,判断重复了不要了呢,是不是白拿了,是不是有点浪费宽带和服务器内存啊,这是能优化的地方啊。

这个是最近在做文件处理的时候想到了这样的问题的。

还有一个问题,post表单文件,没读它是否也来到服务器了呢,或者我们读它才会流上来呢?

看一下这个类的api介绍:大概意思是请求上来的时候这个类就把文件缓存在内存或者磁盘,大文件会缓存到磁盘中,等待处理,请求结束才清除,很明显发起post请求 文件就来到服务器了

71cb484122e937a21a097cb8aabe35a7.png

api

百度了一圈,好像都没什么相关的问题,都是教你怎么上传文件,然后在服务器上判断重复的问题的。是不是我想得太多了,这不是问题吗,不管了,我说我的想法就得了。

既然不让文件上到服务器,那就在前端了,在文件post之前,是不是可以先拿文件摘要上去,判断要不要post这个文件上去呢。

当然不应该只在前端判断,因为你的客户不是每个都是正常用户,你懂得,所以原来服务器的判断还是要的,前端 卡一部分文件请求还是有必要的,文件比通常post字符串信息 要大得太多。

怎么在前端取到文件摘要的问题:

js的MD5算法在网上有,代码我就不贴出来了,200行有点长,也有专门js插件,没必要 就一个方法而已。

c076e97beabc56ffef4aeffac60ccc2e.png

js的MD5算法

前端拿到文件的MD5:var objFile = document.getElementById("myfile");

var reader = new FileReader(); //文件加载器

reader.onload = function(evt){ //绑定一个文件加载完成事件

var fileString = evt.target.result; // 读取文件内容

console.log(MD5(fileString));

}

reader.readAsBinaryString(objFile.files[0]) ; //开始读取文件的二进制成01字符

测试结果如下:

1dd08e4a32aa6105ab01d8b318621f94.png

后端java获取得到的摘要:public static void main(String[] args) {

try {

MessageDigest md5 = MessageDigest.getInstance("MD5");

FileInputStream fis = new FileInputStream("tx.jpeg");

byte[] data = new byte[10*1024];

int l = -1;

while((l=fis.read(data))!=-1) {

md5.update(data, 0, l);

}

byte[] mdbs = md5.digest();

fis.close();

for (byte b : mdbs) {

System.out.print(Integer.toHexString(b&0xff));

}

} catch (Exception e) {

e.printStackTrace();

}

}

运行结果:

affbbc29242d9aef30979c3785ae152a.png

运行结果一样的,真正的业务逻辑再慢慢去组织了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值