JavaScript File分段上传
来源: 阅读:588 次 日期:2016-07-21 14:58:31
温馨提示: 小编为您整理了“JavaScript File分段上传”,方便广大网友查阅!

这篇文章主要介绍了JavaScript File分段上传的相关资料,需要的朋友可以参考下

HTML

<form method="POST" name="form" 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方法

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;

}<br>  //按大小切割文件段

var blob = file.slice(start, end);

xmlhttp.setRequestHeader('charset','utf-8');

xmlhttp.setRequestHeader("fileMD5", fileMD5);

xmlhttp.setRequestHeader("start", start);

xmlhttp.setRequestHeader("end", end);

xmlhttp.send(blob);

if(xmlhttp.status==200){<br> if(end==size){<br> var backtext=xmlhttp.responseText;<br> alert(backtext);<br> }else{<br> alert("上传完成第"+i+"段")<br> start=end;<br> chunk_upload(button);<br> }<br> }else{<br> alert("上传错误");<br> chunk_upload(button);<br> }

}

主要思想:

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

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

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

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

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

注意:

切割的start与end和filesize的关系

纯js异步上传文件,并返回上传进度

纯js实现异步上传文件,异步返回文件上传进度,0.05到0.1秒回调一次上传进度,其它详细见代码片段下用法注释

1. 简单的异步上传函数

;(function(window,document){

var myUpload = function(option) {

var file,

fd = new FormData(),

xhr = new XMLHttpRequest(),

loaded, tot, per, uploadUrl,input;

input = document.createElement("input");

input.setAttribute('id',"myUpload-input");

input.setAttribute('type',"file");

input.setAttribute('name',"files");

input.click();

uploadUrl = option.uploadUrl;

callback = option.callback;

uploading = option.uploading;

beforeSend = option.beforeSend;

input.onchange= function(){

file = input.files[0];

if(beforeSend instanceof Function){

if(beforeSend(file) === false){

return false;

}

}

fd.append("files", file);

xhr.onreadystatechange = function() {

if (xhr.readyState == 4 && xhr.status == 200) {

if(callback instanceof Function){

callback(xhr.responseText);

}

}

}

//侦查当前附件上传情况

xhr.upload.onprogress = function(evt) {

loaded = evt.loaded;

tot = evt.total;

per = Math.floor(100 * loaded / tot); //已经上传的百分比

if(uploading instanceof Function){

uploading(per);

}

};

xhr.open("post", uploadUrl);

xhr.send(fd);

}

};

window.myUpload = myUpload;

})(window,document);

//用法

//触发文件上传事件

myUpload({

//上传文件接收地址

uploadUrl: "/async/myUpload.php",

//选择文件后,发送文件前自定义事件

//file为上传的文件信息,可在此处做文件检测、初始化进度条等动作

beforeSend: function(file) {

},

//文件上传完成后回调函数

//res为文件上传信息

callback: function(res) {

},

//返回上传过程中包括上传进度的相关信息

//详细请看res,可在此加入进度条相关代码

uploading: function(res) {

}

});

更多信息请查看网络编程
手机网站地址:JavaScript File分段上传
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:hfpxwx
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map