Ajax JQuery HTML 提交上传文件File HTML+ Ajax+ASP.NET+ WebService

        起因:公司最近有些项目用到了HTML+WebService的组合,发现访问速度等都快了许多,但是由于通过Ajax只能应付一些简单的文字类的传输,上传文件就捉襟见肘了,如果一直引用第三方的swf之类上传也不是一个办法,所以,一直在寻找解决文件上传的方法。找了许多方法,后来知道需要指定格式才能上传文件,就是要指定Form表单为: enctype = "multipart/form-data"  才可以上传文件,然后这里面最后实现了上传,但是新的问题又来了,这中方法,文件上传之后,会跳转到另外一个页面,这样交互性非常不友好,所以,又想改进为无刷新的,最后找到了一个下面的方法,但是 目前还是有Bug,所以,如果知道怎么解决的,麻烦告诉我一下。
         首先:引用JQuery,这个是必不可少的;
         JavaScript:
     <script type="text/javascript">
            function doUpload() {
                var formData = new FormData($("#uploadForm")[0]);
                $.ajax({
                    url'http://localhost:34181/HomeService.asmx/UploadFile?jsoncallback=?',
                    type'POST',
                    dataformData,
                    asyncfalse,
                    cachefalse,
                    contentTypefalse,
                    processDatafalse,
//                    dataType: "jsonp",//问题就在这里,如果用了jsonp,那么后台就接收不到文件流,无法获得文件流,就没办法把文件写入服务器。如果不指定,就是注释掉,虽然ajax提交之后,还是跑到error那里去,但是文件已经是成功写入服务器的了。
                    jsonp"jsoncallback",
                    successfunction(returndata) {
                        var vData JSON.stringify(returndata);
                        alert(vData);
                    },
                    errorfunction(returndata) {
                        var vData JSON.stringify(returndata);
                        alert(vData);
                    }
                });
            }
        </script>  

          HTML:

          < form id="uploadForm" >
            <p>指定文件名:
                <input type="text" name="filename" value="" />
            </p>
            <p>上传文件:
                <input type="file" name="file" />
                </ p>
                <input type="button" value="上传" onclick="doUpload()/>
     </form>


    后台(WebService):
     ///   <summary>
        /// 上传文件
        /// </summary>
        /// <returns></returns>
        [WebMethod(EnableSession = true)]
        public void UploadFile()
        {
            HttpContext.Current.Response.ContentType = "application/json;charset=utf-8";
            string jsonCallBackFunName = HttpContext.Current.Request.Params["jsoncallback"].ToString(); //这里如果前台没有用jsonp,那么获取到的是一个?,所以处理完之后,前台是没法获取到服务器返回的内容的。
            //上面代码必须,不能注释
            //中间代码执行自己的业务操作,可返回自己的任意信息(多数据类型)
            string strJson = "";
            HttpFileCollection files = HttpContext.Current.Request.Files;
            string strFileName = HttpContext.Current.Request["filename"];
            byte[] b = new byte[files[0].ContentLength];
            System.IO.Stream fs = (System.IO.Stream)files[0].InputStream;
            fs.Read(b, 0, files[0].ContentLength);
            ///定义并实例化一个内存流,以存放提交上来的字节数组。
            MemoryStream m = new MemoryStream(b);
            ///定义实际文件对象,保存上载的文件。
            FileStream f = new FileStream(Server.MapPath("\\UploadFile") + "\\"
             + files[0].FileName, FileMode.Create);
            ///把内内存里的数据写入物理文件
            m.WriteTo(f);
            m.Close();
            f.Close();
            f = null;
            m = null;
            if (strJson == "")
            {
                strJson = "0";
            }
            //下面代码必须,不能注释
            HttpContext.Current.Response.Write(string.Format("{0}({1})", jsonCallBackFunName, strJson));
            HttpContext.Current.Response.End();
        }

     前面的Formdata提交,是我在别处看到的一个人分享的,也特别感谢他,虽然我目前还有bug,但至少已经实现了我上传文件的目的,否则,还得把项目通过fileupload控件来实现,这样访问速度肯定慢了,我把上述心得发出来,希望大家共同进步,如果已经解决这个问题的,请赐教,谢谢。

    贴出上述方法的原文链接:http://yunzhu.iteye.com/blog/2177923




转载于:https://www.cnblogs.com/nangong/p/62cef83761dd0faaeb3fb48c1bff383b.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值