网站首页  汉语字词  英语词汇  考试资料  写作素材  旧版资料

请输入您要查询的考试资料:

 

标题 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) {
    }
    });
随便看

 

在线学习网考试资料包含高考、自考、专升本考试、人事考试、公务员考试、大学生村官考试、特岗教师招聘考试、事业单位招聘考试、企业人才招聘、银行招聘、教师招聘、农村信用社招聘、各类资格证书考试等各类考试资料。

 

Copyright © 2002-2024 cuapp.net All Rights Reserved
更新时间:2025/5/17 11:42:52