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

    xiaoxiao2026-03-29  11

          需求是这样的:把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 = "未知错误,请联系管理员" });         }      至此上传文件就可以了,希望对大家有帮助 
    转载请注明原文地址: https://ju.6miu.com/read-1308299.html
    最新回复(0)