jquery 无刷新上传文件,xmlhttprequest是无法上传文件的。

<% using (Html.BeginForm("importstu","Admin",FormMethod.Post,new{enctype="multipart/form-data",id="form"})) {%>  
    请选择上传的Excel文件:  
    <input id="upfile" type="file" name="upfile" style="width: 250px; background: White" class="easyui-validatebox" validtype="length[1,100]" />  
    <input type="submit" id="btn" value="上传" name="btn" style="width: 50px"/>  
   <%}%>  
    <script type="text/javascript">  
        $("#btn").bind("click", function () { //点击确定按钮的时候  
            var file = ($("#upfile").val());  
            if (file == "") {  
                $.messager.alert('系统提示', '请选择将要上传的文件!');  
            }  
            else {  
                var stuff = file.match(/^(.*)(\.)(.{1,8})$/)[3];  
                if (stuff != 'xls') {  
                    alert('文件类型不正确,请选择.xls文件!');  
                }  
                else {  
                    $('#form').form({  
                        success: function (data) {  
                            $.messager.alert('系统提示',data, 'info');  
                        }  
                    });  
                }  
            }  
        });  
    </script>

后台asp.net mvc:
        [HttpPost]
        public ActionResult importstu(HttpPostedFileBase upfile)
	//upfile必须和前台input 的id一致
         {
            if (upfile != null)
            {
                if (upfile.ContentLength > 0)
                {
                    string importfile = Server.MapPath("~/Uploaded/temp.xls");
                    string result = string.Empty;
                    upfile.SaveAs(importfile);
                    string strConn;
                    strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + importfile + "; " + "Extended Properties=Excel 8.0;";
                    OleDbDataAdapter myCommand = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", strConn);
                    DataSet myDataSet = new DataSet();
                    myCommand.Fill(myDataSet, "Students");
                    DataTable tab = myDataSet.Tables["Students"].DefaultView.ToTable();
                    foreach()
                    {
                    }
                    result = "导入成功!";
                    JsonResult json = new JsonResult();
                    json.Data = result;
                    return json;
                }
                else
                    return View();
            }
            else
                return View();
        }


前台:jquery实现form递交,并非xmlhttprequest上传文件,ajax上传文件只是用iframe模拟,ajax中的xmlhttprequest是无法上传文件的。

xml因为只能承载文本信息 传输文件这样的二进制信息需要使用base64或QP编码格式 所以需要在客户端将二进制文件转换成base64或QP编码. 但由于安全因素js在客户端是不允许操作本地文件的,IE下在设置过安全级别后可以通过ado.stream和file system object来操作文件和2进制数据.再通过脚本转换成base64或QP编码,才能通过xml上传文件.就算如果不使用xml做为载体,直接post文件数据也得使用base64或QP编码格式.但这样还有很多更复杂的东西不建议使用.而且用js去读取并且编码文件也是很复杂的.

版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值