Input标选择多文件后如何上传

开发工具与关键技术:Visual Studio 2015 JavaScript
作者:宁佐潮
撰写时间:2019.4.18
根据上篇文章选择文件后,接下来便是上传文件
我这里上传文件在js这边采取的是for循环添加,添加file到new的formData,然后new一个XMLHttpRequest对象,因为是文件,所以用post提交,然后用send发送数据xhr.send(formData);
最后当i自加到选择文件的数量时,便是循环添加到了最后,输出一下添加的情况
在这里插入图片描述

//保存批量上传文件
function SaveBatch() {
    layer.alert("上传文件较多时,请耐心等待!", function () {
        var file = $("#filesArry")[0].files;
        var succeed = 0;
        var defeated = 0;
        var layuiIndex;
        if (file.length > 0) {
            //批量保存的歌曲文件上传
            for (var i = 0; i < file.length; i++) {
                var formData = new FormData();
                formData.append("file", file[i]);
                //=new一个XMLHttpRequest对象
                var xhr = new XMLHttpRequest();
                //=注册监听事件
                //发送成功事件
                xhr.onload = function (event) {
                    var strText = event.currentTarget.responseText;
                    if (strText == "true") {
                        succeed++;
                    } else {
                        defeated++;
                    }
                };
                //上传失败事件
                xhr.onerror = function (event) {
                    var strText = event.currentTarget.responseText;
                    if (strText == "true") {
                        succeed++;
                    } else {	
defeated++;		
}
                };
                //上传进度---会不断被调用
                xhr.upload.onprogress = function (event) {
                    if (event.lengthComputable) {
// event.total是需要传输的总字节,event.loaded是已经传输的字节。如果event.lengthComputable不为真,则event.total等于0
              console.log(event.total + "--->" + event.loaded + "----->" + 
(event.loaded / event.total * 100) + "%");
                    }
                };
                //上传文件一定要用POST方式提交
                xhr.open("POST", "UpEeditorFilesArry");
                //打开加载层
                layuiIndex = layer.msg('上传中...', {
                    icon: 16,
                    time: 0,
                    shade: 0.3
                });
                //发送数据
                xhr.send(formData);
                if (i == (file.length - 1)) {
                    tabSinger.reload();
                    layer.close(layuiIndex);//关闭加载层
                    $("#modalInsertID").modal('hide');
                    layer.alert("添加成功" + succeed + "个!失败"+ defeated + "个");
                }
            }
        } else {
            layer.alert("请选择文件");
        }
});		
}

控制器这边就是根据传过来的文件信息,判断下不是空,判断下文件上传的指定路径存在否,然后把文件添加到指定路径

public ActionResult UpEeditorFilesArry(HttpPostedFileBase file)
{
    ReturnJsonVo returnJson = new ReturnJsonVo();
    try
    {
        if (file != null)
        {
            string fileName = file.FileName;
            if (!Directory.Exists(Server.MapPath("~/Content/music")))
            {
                Directory.CreateDirectory(Server.MapPath("~/Content/music"));
            }
            string filePath = Server.MapPath("~/Content/music/") + fileName;
            file.SaveAs(filePath);
            string str = fileName;
            returnJson.State = true;
            returnJson.Text = str;
        }
        else
        {
            returnJson.Text = "文件为空!";
        }
    }
    catch (Exception)
    {
        returnJson.Text = "数据异常";
    }
    return Json(returnJson, JsonRequestBehavior.AllowGet);
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44484520/article/details/89326681
今日推荐