HTML

<form method="POST" name="form1" action="/mupload/upload/" enctype="multipart/form-data">
<input type='hidden' name='csrfmiddlewaretoken' value='' />
<input id='file' type='file' name='file' onchange="" />
<input id='button' name='submit' type='button' value="上传" onclick="chunk_upload(this)"/>
</form>

js方法

<script src="/static/newupload/md5.js"></script>

var fileSplitSize = 1024 * 1024;
var start=0,end=0;
var i=0;
// 文件段上传
function chunk_upload(button){
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("POST", "/chunk_upload/upload/", false);
xmlhttp.setRequestHeader("X-CSRFToken", button.form['csrfmiddlewaretoken'].value);
var f = button.form;
var file = f['file']['files'][0];
var size=file.size;
end=start+fileSplitSize;
if(end>size){
i=-1;
end=size;
}else{
i+=1;
end=end;
}
  //按大小切割文件段
var data= file.slice(start, end);
   var r=new FileReader();
   r.readAsBinaryString(data);
  $(r).load(function(e){
     var bolb=e.target.result;
     var check=hex_md5(bolb);
  xmlhttp.setRequestHeader('charset','utf-8');
  xmlhttp.setRequestHeader("fileMD5", fileMD5);
     xmlhttp.setRequestHeader("check", check);
  xmlhttp.setRequestHeader("start", start);
  xmlhttp.setRequestHeader("end", end);
  xmlhttp.send(data);   if(xmlhttp.status==200){
        if(end==size){
            var backtext=xmlhttp.responseText;
            alert(backtext);
        }else{
            alert("上传完成第"+i+"段")
            start=end;
            chunk_upload(button);
        }
      }else{
         alert("上传错误");
         chunk_upload(button);
      }
  })
}

主要思想:

  注意设置切割的起始位置和切割大小,通过XMLHttpRequest的发送请求(http协议要知道)。

  如果一些标记数据可以添加协议头:xmlhttp.setRequestHeader("end", end);

  发送协议体xmlhttp.send(data);

  监听返回码来判断是否传递成功,在进行下一步操作。

  重新设置切割位置,然后递归调用自身start=end;chunk_upload(button);

注意:

  切割的start与end和filesize的关系

MD5.js校验

  file.slice()方法切割出来的data是Bolb类型的,里面虽然是二进制流,但是不能直接用MD5.js加密。

  所以加密的思想就是先转化为可以读取的二进制流,使用传统的var r=new FileReader();

  r.readAsBinaryString(data);将文件转化为二进制流,但是fileread无论读取失败还是成功都是不返回结果的,要想获取结果就要在result中获取,监听是否加载成功。$(r).load(function(e){})监听。

  注意:要把所有的数据传递放到,监听函数中。

JS分段上传文件(File)并使用MD5.js加密文件段用来后台校验的更多相关文章

  1. 基于Metronic的Bootstrap开发框架经验总结(5)--Bootstrap文件上传插件File Input的使用

    Bootstrap文件上传插件File Input是一个不错的文件上传控件,但是搜索使用到的案例不多,使用的时候,也是一步一个脚印一样摸着石头过河,这个控件在界面呈现上,叫我之前使用过的Uploadi ...

  2. Bootstrap文件上传插件File Input的使用

    基于Metronic的Bootstrap开发框架经验总结(5)--Bootstrap文件上传插件File Input的使用 Bootstrap文件上传插件File Input是一个不错的文件上传控件, ...

  3. Asp.Net Core 2.0 WebUploader FastDfs 文件上传 分段上传

    功能点: 1. 使用.net core 2.0 实现文件上传 2. 使用webuploader实现单文件,多文件上传 3. 使用webuploader实现大文件的分段上传. 4. 使用webuploa ...

  4. (转)基于Metronic的Bootstrap开发框架经验总结(5)--Bootstrap文件上传插件File Input的使用

    http://www.cnblogs.com/wuhuacong/p/4774396.html Bootstrap文件上传插件File Input是一个不错的文件上传控件,但是搜索使用到的案例不多,使 ...

  5. js实现分段上传文件

    使用js实现分段上传文件,本文使用了FileReader对象,可参考:https://developer.mozilla.org/zh-CN/docs/Web/API/FileReader 1)获取文 ...

  6. JS 异步分段上传文件

    为了解决大文件上传 (PHP上传最大限制2GB) 同时为了解决文件上传是对服务器造成的压力 可以通过分段上传解决这个问题,这得益于HTML5开发的file API 前台代码: 引用了进度条插件myPr ...

  7. Web API之基于H5客户端分段上传大文件

    http://www.cnblogs.com/OneDirection/articles/7285739.html 查询很多资料没有遇到合适的,对于MultipartFormDataStreamPro ...

  8. 利用ajaxfileupload.js异步上传文件

    1.引入ajaxfileupload.js 2.html代码 <input type="file" id="enclosure" name="e ...

  9. js获取上传文件内容(未完待续)

    js 获取上传文件的字节数及内容 <div> 上传文件 : <input type="file" name = "file" id = &qu ...

随机推荐

  1. mongodb 在windows上安装为服务

    // mongo 也是先安装扩展 在安装为服务 首先 先下载mongodb的压缩包 解压(一个bin文件夹 三个文件) 在目录下 新建立一文件夹 mongodb 然后将解压的内容放进去 然后在mong ...

  2. AJAX中的dataType(数据格式)-text、json

    因为经常使用数据格式,所以将它封装成类,J这样就不会用到时就写了,直接调用写好的类就可以了 (1)dataType数据格式为:TEXT格式的数据是字符串的数据,在"ajax对数据进行删除和查 ...

  3. AtomicLong

    Spring package com.uniubi.management.controller; import java.util.concurrent.atomic.AtomicLong; impo ...

  4. android应用程序的优先级

    andorid系统为保障应用程序运行的流畅性,当内存资源比较匮乏的时候会杀死那些优先级比较低的进程 android进程的优先级如下图: 1.活动进程: 是指那些正在与用户进行交互的应用程序进程,这种组 ...

  5. Redis学习手册(持久化)

    一.Redis提供了哪些持久化机制: 1). RDB持久化:    该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘.        2). AOF持久化:    该机制将以日志的形式记录服务 ...

  6. Solr学习笔记-在Tomcat上部署执行Solr

    上一篇我们初识了Solr而且学习了Jetty的启动方式.查看了Solr的管理界面,这一篇我们来实如今Tomcat上部署执行Solr. 部署环境: window7 jdk1.6.0_14 Solr-4. ...

  7. 由 Windows 向 Linux 迁移字体 和 Linux 等宽字体

    1. From Windows Windows下字体库的位置为C:\Windows\fonts,这里面包含所有windows下可用的字体.2. To Linux linux的字体库是 /usr/sha ...

  8. mysql2csv 和 csv2mysql 工具

    mysql2csv 和 csv2mysql 工具 在这里提供了两个使用 .csv 格式 的简单的 MySQL 数据库的导数据工具.csv 格式可以很容易地生成和解析,而且,也可以很容易地使用办公软件把 ...

  9. NUnit使用详解(二)

    转载:http://hi.baidu.com/grayworm/item/39aa11c5d9375d56bdef6990 五:常用断言 在NUnit中,断言是单元测试的核心.NUnit提供了一组丰富 ...

  10. js 函数命名

    1 函数命名可以使用匿名: var f=function(x){return x*2;} 2 可以使用变量: function double(x){return x*2;} 二者区别:后者会绑定到与其 ...