当前位置:   article > 正文

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

java上传linux文件判断文件是否重复

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

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

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

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

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

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

8cc44f00b2cff84e87ea5b8f4be7f267.png

api

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

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

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

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

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

2d35feff3f621f084dc5dcc3dfc72fd2.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字符

测试结果如下:

5ff54ffc99412ae083559ca22f91b442.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();}}

运行结果:

40e141ad8c7e17b192bb621df5b04b96.png

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

觉得可以的话就关注一下呗

注册后没怎么发文,现在有空了

偶尔发发,【关注】【关注】

再可以的话,一起吃鸡 哦

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/871615
推荐阅读
相关标签
  

闽ICP备14008679号