简单实现Ajax异步上传文件

本文介绍如何使用FormData对象和Ajax实现文件的异步上传功能,包括前端表单设计、FormData对象构建及Ajax提交过程。

认识FormData对象

XMLHttpRequest Level 2添加了一个新的接口FormData.利用FormData对象,我们可以通过JavaScript用一些键值对来模拟一系列表单控件,我们还可以使用XMLHttpRequest的send()方法来异步的提交这个"表单".比起普通的ajax,使用FormData的最大优点就是我们可以异步上传一个二进制文件。若要更详细的了解FormData对象,请查看使用FormData对象。具体代码,标红处需要特别注意:
<form id="myForm" method="post" class="form-horizontal" name="myForm" enctype="multipart/form-data" action="">
                    <div class="form-body">
                        <div class="form-group">
                            <label class="col-md-2 control-label">类型</label>
                            <div class="col-md-10">
                                <div class="mt-radio-inline">
                                    <label class="mt-radio">
                                        <input type="radio" name="Type" id="news" value="行业新闻" checked> 行业新闻
                                        <span></span>
                                    </label>
                                    <label class="mt-radio">
                                        <input type="radio" name="Type" id="trends" value="协会动态"> 协会动态
                                        <span></span>
                                    </label>
                                    <label class="mt-radio">
                                        <input type="radio" name="Type" id="laws" value="法律法规"> 法律法规
                                        <span></span>
                                    </label>
                                </div>
                            </div>
                        </div>
                        <div class="form-group">
                            <label class="col-md-2 control-label">标题</label>
                            <div class="col-md-10">
                                <div class="input-icon">
                                    <i class="fa fa-bell-o"></i>
                                    <input type="text" name="Title" id="Title" class="form-control" placeholder="新闻标题">
                                </div>
                            </div>
                        </div>
                        <div class="form-group">
                            <label class="control-label col-md-2">图片:</label>
                            <div class="col-md-10">
                                <input type="file" id="myfile" name="ImageUrl" />
                            </div>
                        </div>
                        <div class="form-group">
                            <label class="col-md-2 control-label">内容</label>
                            <div class="col-md-10">
                                <input type="hidden" id="Content" name="Content" value="" />
                                @*<textarea name="Content" id="Content" class="form-control" rows="10"></textarea>*@
                                <script type="text/plain" id="myEditor" style="height:250px">
                                </script>
                            </div>
                        </div>
                    </div>
                </form>
		<button type="button" class="btn btn-default" οnclick="closeModal()" data-dismiss="modal">关闭</button>
                <button οnclick="submitData()" class="btn btn-primary">提交</button>

使用FormData对象创建一个表单

        function submitData() {
            var title = $('#Title').val();
            var type = $("input[name='Type']:checked").val();
            var content = $('#Content').val();
            content = ue.getContent();
            var file = document.getElementById("myfile").files[0];
 
            var formData = new FormData();
            formData.append("Title", title);
            formData.append("Type", type);
            formData.append("Content", encodeURI(content));
            formData.append("ImageUrl", file);

使用Ajax提交FormData对象
             $.ajax({
                url: "/Isoc/NewslawsManage/Index",
                type: "post",
                data: formData,
                contentType: false,//必须为false才会自动加上正确的Content-Type
                processData: false,//必须为false,才会重置jquery对formdata的默认处理
                success: function (data) {
                    var result = data.split(':');
                    if (result[0] == "yes") {
                        alert(result[1]);
                    } else {
                        alert(result[1]);
                    }
                },
                error: function (data) {
                    console.info(data);
                }
            })
        }
后台接受代码
 public ActionResult Index(News news, HttpPostedFileBase ImageUrl)
        {
            string path = string.Empty;
            if (ImageHelper.UpImages(ImageUrl, "NewsImage", out path))
            {
                using (var db = new IsocContext())
                {
                    news.ImageUrl = path;
                    news.CreateTime = DateTime.Now;
                    db.News.Add(news);
                    return db.SaveChanges() > 0 ? Content("no:新闻发布成功") : Content("no:新闻发布失败");
                }
            }
            else
            {
                return Content("no:新闻发布失败");
            }
        }
至此Ajax上传文件就完成了,如有不对的地方还望指出,共同进步。


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值