JS分段上传文件(File)并使用MD5.js加密文件段用来后台校验
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加密文件段用来后台校验的更多相关文章
- 基于Metronic的Bootstrap开发框架经验总结(5)--Bootstrap文件上传插件File Input的使用
Bootstrap文件上传插件File Input是一个不错的文件上传控件,但是搜索使用到的案例不多,使用的时候,也是一步一个脚印一样摸着石头过河,这个控件在界面呈现上,叫我之前使用过的Uploadi ...
- Bootstrap文件上传插件File Input的使用
基于Metronic的Bootstrap开发框架经验总结(5)--Bootstrap文件上传插件File Input的使用 Bootstrap文件上传插件File Input是一个不错的文件上传控件, ...
- Asp.Net Core 2.0 WebUploader FastDfs 文件上传 分段上传
功能点: 1. 使用.net core 2.0 实现文件上传 2. 使用webuploader实现单文件,多文件上传 3. 使用webuploader实现大文件的分段上传. 4. 使用webuploa ...
- (转)基于Metronic的Bootstrap开发框架经验总结(5)--Bootstrap文件上传插件File Input的使用
http://www.cnblogs.com/wuhuacong/p/4774396.html Bootstrap文件上传插件File Input是一个不错的文件上传控件,但是搜索使用到的案例不多,使 ...
- js实现分段上传文件
使用js实现分段上传文件,本文使用了FileReader对象,可参考:https://developer.mozilla.org/zh-CN/docs/Web/API/FileReader 1)获取文 ...
- JS 异步分段上传文件
为了解决大文件上传 (PHP上传最大限制2GB) 同时为了解决文件上传是对服务器造成的压力 可以通过分段上传解决这个问题,这得益于HTML5开发的file API 前台代码: 引用了进度条插件myPr ...
- Web API之基于H5客户端分段上传大文件
http://www.cnblogs.com/OneDirection/articles/7285739.html 查询很多资料没有遇到合适的,对于MultipartFormDataStreamPro ...
- 利用ajaxfileupload.js异步上传文件
1.引入ajaxfileupload.js 2.html代码 <input type="file" id="enclosure" name="e ...
- js获取上传文件内容(未完待续)
js 获取上传文件的字节数及内容 <div> 上传文件 : <input type="file" name = "file" id = &qu ...
随机推荐
- WinForm Excel导入
主要代码如下: 定义一个DataSet 存放Excel读取的数据 /// <summary> /// Excel 表中读取的数据 /// </summary> publi ...
- 拍照返回的bitmap太小
private void doPhoto(int requestCode) { if(!Environment.getExternalStorageState().equals(Environment ...
- Error In Work
ReferenceError: BAD_REQUEST is not defined MyBatis配置错误,比如$!conflict.id,写成conflict.$!id
- 【DB】HBase的基本概念
一 Hbase是个啥东东? 在说Hase是个啥家伙之前,首先我们来看看两个概念.面向行存储和面向列存储.面向行存储.我相信大伙儿应该都清楚,我们熟悉的RDBMS就是此种类型的.面向行存储的数据库主要 ...
- 一个卡片式的ViewPager,带你玩转ViewPager的PageTransformer属性!
ViewPager的基本用法不必多说,这都很简单,我们可以在ViewPager中加载一个ImageView,也可以加载一个Fragment,这都是目前非常常见的用法.那么我今天说的是ViewPager ...
- android开发之shape详解
很多时候,使用shape能够实现的效果,你用一张图片也能够实现,但问题是一张图片无论你怎么压缩,它都不可能比一个xml文件小,因此,为了获得一个高性能的手机App,我们在开发中应该遵循这样一个原则:能 ...
- Java基础知识强化之IO流笔记61:输入流 和 输出流 使用总结
1. 结构: 字节流:InputStream,OutputStream 字符流:Reader,Writer 2. 字符流 和 字节流: (1)Reader:读取字符流的抽象类 BufferedRead ...
- iOS之CAKeyframeAnimation关键帧动画详解
CABasicAnimation算是CAKeyFrameAnimation的 特殊情况,即不考虑中间变换过程,只考虑起始点与目标点就可以了.而CAKeyFrameAnimation则更复杂一些,允许我 ...
- Android_Broadcast
/** * Broadcast(广播):是一种广泛运用的在应用程序之间传输信息的机制 * * BroadcastReceiver(广播接收者) * 是对发送出来的广播进行过滤接收并响应的一类组件,它就 ...
- 并发与多版本:update重启动问题
以下演示重启动问题,请注意 before触发器和after触发器的行为区别,因为before触发器会触发两次而导致重启动问题,因此使用after触发器更加高效,应该尽量避免在所有触发器中使用自治事务 ...