您的位置:首页 > 编程语言 > ASP

因位笔记之Asp.Net MVC异步上传文件

2016-08-16 11:05 399 查看
      需求是这样的:把excel和一些其他的数据比如textBox的value select的值上传到服务器上统一进行处理,而且要求是同步,也就是说excel和其他的信息必须同时成功或者都不成功

     上传文件就是把文件从本机上传到服务器,以前没有搞过这块,贸然之间不知道从何下手,上网查了很多资料,都是只用form表单然后用submit提交,但是因为业务的特殊性以及我们的MVC中的textBox是经过改装的,不能直接获取到val(),而且用form后不能再次异步提交其他数据(也可能是在下才疏学浅,如果有高人指点不胜感激)

      后面找到的解决方案是用js插件来实现,下载地址 http://files.cnblogs.com/files/kissdodog/ajaxfileupload_JS_File.rar

      同时感谢逆心,从这篇文章受到很大发:http://www.cnblogs.com/kissdodog/archive/2012/12/15/2819025.html

      插件是用异步实现的, 所以我的处理步:先校验页面上值的合法性=>用插件提交excel到处理excel的Action中去=>在success中获取到action返回回来的地址加上页面上获取的值=>再次进行ajax提交到另外一个处理这个数据的action去=>得到处理结果

       具体代码如下:

 $.ajaxFileUpload({
            url: '/BatchOrder/UpLoadExcel', //用于文件上传的服务器端请求地址
            secureuri: false, //是否需要安全协议,一般设置为false
            fileElementId: 'fileUpload', //文件上传域的ID
            dataType: 'json', //返回值类型 一般设置为json
            success: function (data)  //服务器成功响应处理函数
            {
//上传成功后继续执行上传其他数据的代码

                if (data.Msg.indexOf("成功") != -1) {
                    //继续执行方法
                    //alert("Excel文件上传成功");
                    var filefillPath = data.ReturnFillPath
                    var fileName = data.FileName;
                    //如果成功,再次进行Ajax请求,存储采购商等数据

                    var request = { ClientID: clientID, PolicyClientID: policyClientID, AddOperatorID: addOperatorID, PolicyChannel: policyChannel, FileName: fileName, Remark: remark, FileFillPath: filefillPath };
                    $.ajax({
                        url: '/BatchOrder/Add',
                        type: 'post',
                        cache: false,
                        data: { input: request }
                       ,
                        success: function (insertData) {
                            
                            alert(insertData.Msg);
                        },
                        error: function () {
                            ShowDialogTip('查询错误,请重新查询');
                        }
                    });

                } else {
                    alert(data.Msg);
                    return;
                }
            },
            error: function ()//服务器响应失败处理函数
            {
                alert("Excel文件上传失败,请检查后重试");
            }
        })  

 

html:这里就是一个tr而已,前面有些textbox之类的东西,只要input  type='file' 然后把id写对就能直接上传了

  <tr>
                        <td colspan="4" class="form-inline align-c">
                            <div class="form-group">
                                <button class="btn" id="btnUpload" onclick="UpLoad()">上传</button>
                            </div>
                            <div class="form-group">
                                <button class="btn btn-dt" id="cancel">取消</button>
                            </div>
                        </td>
                    </tr>  

最后是MVC的后台代码:

[HttpPost]
        public ActionResult UpLoadExcel()
        {
            //全路径,用来插入数据库前计算excel记录条数
            string returnFillPath = String.Empty;
            string fileName = String.Empty;
            try
            {
                HttpFileCollection files = System.Web.HttpContext.Current.Request.Files;
                string configPath = ConfigurationManager.AppSettings["ExcelUpLoadSite"];
                if (files.Count > 0)
                {
                    //返回路径要写在这里才不会被后面所覆盖
                    configPath += files[0].FileName;
                    //判断文件是否存在
                    if(System.IO.File.Exists(configPath))
                    {
                        return Json(new { Msg = "上传失败,已存在同名的Excel,请检查后上传" });
                    }
                    files[0].SaveAs(configPath);
                    //返回文件名
                    fileName = files[0].FileName;
                    returnFillPath = configPath;
                    return Json(new { Msg = "Excel上传成功", FileName = files[0].FileName, ReturnFillPath = returnFillPath });
                }
            }
            catch (Exception ex)
            {
                return Json(new { Msg = "上传失败" });
            }
          return Json(new { Msg = "未知错误,请联系管理员" });
        } 

    至此上传文件就可以了,希望对大家有帮助 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐