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. C#- Winform最小化到托盘

    实现前先拉一个notifyIcon控件,在Icon属性中加入一个ICON小图标,然后具体的代码实现如下: using System; using System.Collections.Generic; ...

  2. CSS- 控制图片显示指定大小 并超过大小自动缩小

    有时候利用css比较方便控制网页html中img图片的显示大小.这样也省得自己一个一个去定义. img,a img{ border:; margin:; padding:; max-width:600 ...

  3. lettCode-Array

    1   Remove Element    lintcode-172 描述: 删相同元素,反现有长度 记忆:标不同元素,反标记值 public int removeElement(int[] a, i ...

  4. WebSerivce测试工具 Storm

    STORM 是一款免费且开源的WebSerivce测试工具 它的功能: 1,测试任意语言测试 WebService 2,可动态调用webservice的方法,即使输入参数需要使用复杂的数据类型 3,节 ...

  5. Unityclient通信測试问题处理(二)

    Unityclient通信測试问题处理(二) 在client的通信測试过程中.场景载入的问题给自己带来了不小的麻烦.由于消息的解析方法在单独的监听线程中调用,这也就意味着无法在消息的解析方法中调用Un ...

  6. ubuntu14.04 64bit 安装 &amp;&amp; 破解quartus13.0 记录

    安装文件:Quartus-13.0.0.156-linux.iso             Quartus-13.0.0.156-devices-1.iso 1.挂载:sudo mount -o lo ...

  7. OpenOffice的安装与启动

    一.安装openOffice1.使用tar -xzvf OOo_3.2.0_LinuxIntel_install_wJRE_en-US.tar.gz解压缩后,会得到OOO320_m12_native_ ...

  8. oc学习笔记2

    .oc中的BOOL类型 oc中的BOOL类型的值为YES和NO,有点小奇怪 在oc中YES不等于1,但是NO一定等于0,所以不要把1和YES来比较 .消息发送 在oc中,经常使用这样的术语:将allo ...

  9. HDU1518(dfs)java/ c++

    Square Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  10. JMS—事务管理

    Spring提供了一个JmsTransactionManager用于对JMS ConnectionFactory做事务管理.这将允许JMS应用利用Spring的事务管理特性.JmsTransactio ...