zoukankan      html  css  js  c++  java
  • 获取文件MD5值(JS、JAVA)

    文章HTML代码翻译于地址:https://www.cnblogs.com/linyihai/p/7040786.html

    文件MD5有啥用?

      文件上传时会上传文件的信息此时将文件的md5上传,服务器中存储这个md5值,并存储这个md5值所对应的已上传字节长度,比如未上传对应为0,已上传对应为-1,已上传200字节就对应200,这个上传的时候可以匹配到这个文件在服务器中的状态,方便做断点续传,只要源文件没有更改,即使换个名字,换个账户都可以在服务器找到对应的文件,所以当服务器中有已经上传完毕的此文件时,别人再上传这个文件就可以实现秒传。

      下面代码实现HTML选择文件获取MD5值、JAVA根据文件地址获取文件MD5值。

    <!DOCTYPE html>
    <html>
      <head>
          <meta charset="utf-8">
      </head> 
      <body>
         <form id="fileupload" action="" method="POST" enctype="multipart/form-data">
            <div>
                <div>                                                             
                    添加文件
                    <input type="file" name="" id="fileinput">                                                                     
                </div>
    
                <progress class='progressbar' value="0" max="100" style='500px;margin-top:20px'></progress>
                <div style='margin-top:20px'>
                    <span id="handler_info" ></span>
                </div>
            </div>   
        </form>
        <!-- https://github.com/satazor/js-spark-md5 -->
        <script src="spark-md5.min.js" type="text/javascript"></script>
        <script>
            function get_filemd5sum(ofile) {
                var file = ofile;
                var tmp_md5;
                var blobSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice,
                    // file = this.files[0],
                    chunkSize = 8097152, // Read in chunks of 2MB
                    chunks = Math.ceil(file.size / chunkSize),
                    currentChunk = 0,
                    spark = new SparkMD5.ArrayBuffer(),
                    fileReader = new FileReader();
    
                fileReader.onload = function(e) {
                    // console.log('read chunk nr', currentChunk + 1, 'of', chunks);
                    spark.append(e.target.result); // Append array buffer
                    currentChunk++;
                    var md5_progress = Math.floor((currentChunk / chunks) * 100);
    
                    console.log(file.name + "  正在处理,请稍等," + "已完成" + md5_progress + "%");
                    var handler_info = document.getElementById("handler_info");
                    var progressbar = document.getElementsByClassName("progressbar")[0];
                    handler_info.innerHTML=file.name + "  正在处理,请稍等," + "已完成" + md5_progress + "%"
                    progressbar.value =md5_progress;
                    if (currentChunk < chunks) {
                        loadNext();
                    } else {
                        tmp_md5 = spark.end();
                        console.log(tmp_md5)
                        handler_info.innerHTML = file.name + "的MD5值是:" + tmp_md5;
                    }
                };
    
                fileReader.onerror = function() {
                    console.warn('oops, something went wrong.');
                };
    
                function loadNext() {
                    var start = currentChunk * chunkSize,
                        end = ((start + chunkSize) >= file.size) ? file.size : start + chunkSize;
                    fileReader.readAsArrayBuffer(blobSlice.call(file, start, end));
                }
                loadNext();
            }
    
            var uploadfile  = document.getElementById('fileinput')
            uploadfile.onchange = function(e){
                var file = this.files[0];
                 if(!file) {
                    alert('请选择文件!');
                    return false;
                }
                get_filemd5sum(file)
            }
        </script>
       </body> 
    </html>
    /**
         * 获取文件的md5
         * @param filePath 文件地址
         * @param fileName 文件名
         * @return
         */
        public static String getFileMd5Value(String filePath, String fileName){
            File file = new File(filePath + File.separator + fileName);
            if(!file.exists() || !file.isFile()){
                return "";
            }
            byte[] buffer = new byte[2048];
            try {
                MessageDigest digest = MessageDigest.getInstance("MD5");
                FileInputStream in = new FileInputStream(file);
                while(true){
                    int len = in.read(buffer,0,2048);
                    if(len != -1){
                        digest.update(buffer, 0, len);
                    }else{
                        break;
                    }
                }
                in.close();
                 
                byte[] md5Bytes  = digest.digest();
                StringBuffer hexValue = new StringBuffer();
                for (int i = 0; i < md5Bytes.length; i++) {
                    int val = ((int) md5Bytes[i]) & 0xff;
                    if (val < 16) {
                        hexValue.append("0");
                    }
                    hexValue.append(Integer.toHexString(val));
                }
                return hexValue.toString();
            } catch (Exception e) {
                e.printStackTrace();
                return "";
            }
        }
        
        public static void main(String[] args) {
            System.out.println(Snippet.getFileMd5Value("C:\Users\Administrator\Desktop", "test.txt"));
        }
  • 相关阅读:
    python 线程队列、线程池、全局解释器锁GIL
    java Cookie 获取历史记录列表(三)
    Java中如何读写cookie (二)
    java读取和写入浏览器Cookies
    zookeeper的安装和部署
    Spring Boot 多模块项目创建与配置 (一)
    十款效果惊艳的Html案例(一)
    phython
    阿里高并发所用到的技术
    Java9新特性
  • 原文地址:https://www.cnblogs.com/kawhileonardfans/p/10966245.html
Copyright © 2011-2022 走看看