ajax+ashx+bootstrap上传文件

<!--一般处理程序-->
  public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "multipart/form-data";
            try
            {
                //从Request中取参数,注意上传的文件在Requst.Files中
              //  HttpFileCollection files = HttpContext.Current.Request.Files;
                string name = HttpContext.Current.Request["name"];
                int total = Convert.ToInt32(HttpContext.Current.Request["total"]);//总共分了多少份
                int index = Convert.ToInt32(HttpContext.Current.Request["index"]);//当前第几份
                var data = HttpContext.Current.Request.Files["data"];//接收的文件
                //保存一个分片到磁盘上
                string dir = HttpContext.Current.Request.MapPath("/File");
                string file = Path.Combine(dir, name + "_" + index);
                data.SaveAs(file);
                //for (var i = 0; i <= file.Length; i++)
                //{
                //    files[i].SaveAs(file);
                //}
                //如果已经是最后一个分片,组合
 
                //接收每个分片时直接写到最终文件的相应位置上
                if (index == total)
                {
                    file = Path.Combine(dir, name);
                    byte[] bytes = null;
                    using (FileStream fs = new FileStream(file, FileMode.OpenOrCreate))
                    {
                        for (int i = 1; i <= total; ++i)
                        {
                            string part = Path.Combine(dir, name + "_" + i);
                            bytes = System.IO.File.ReadAllBytes(part);
                            fs.Write(bytes, 0, bytes.Length);
                            bytes = null;
                            System.IO.File.Delete(part);
                        }
                        fs.Close();
                    }
                }
                context.Response.Write("{\"row\":\"" + true + "\"}");
            }
            catch (Exception e)
            {
                context.Response.Write("{\"row\":\"" + false + "\"}");
                throw;
            }
            //返回是否成功,此处做了简化处理
            //return Json(new { Error = 0 });
        }
<!--HTML-->
<!DOCTYPE html>
 
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
    <link href="BootstrapSouce/css/bootstrap.css" rel="stylesheet" />
    <script src="BootstrapSouce/js/jquery.js"></script>
    <script src="BootstrapSouce/js/bootstrap.js"></script>
    <style>
        .head {
            margin-top: 20px;
        }
    </style>
    <script>
        function uploadFile() {
            //获取所有的文件控件
            var upfiles = $("input[type=file]");
            //所有文件的分页数
            var filesCountSum = 0;
            //设置进度条初始值为0
            $('.progress .progress-bar')[0].style = "width:0%";
            $("#progressBar")[0].innerText = "0%";
            //移除提示框内容、清空文本
            $("#alertBox").removeClass();
            $("#alertBox").text("");
            //设置上传、重置按钮为禁用状态
            $("#upload").addClass("disabled");
            $("#reset").addClass("disabled");
            for (var i = 0; i < upfiles.length; i++)
            {
                if (upfiles[i].files[0] == undefined || upfiles[i].files[0] == undefined || upfiles[i].files[0] == undefined) {
                    $("#alertBox").addClass("alert alert-danger");
                    $("#alertBox").text("请上传3个文件");
                    $("#upload").removeClass("disabled");
                    $("#reset").removeClass("disabled");
                } else {
                    //计算所有的文件分片总数
                    upfiles.each(function () {
                        size = $(this)[0].files[0].size;
 
                        var shardSize = 2 * 1024 * 1024;   //以2MB为一个分片
                        filesCountSum += Math.ceil(size / shardSize);  //总片数
 
                    })
                    var succeed = 0;
                    upfiles.each(function () {
                        var file = $(this)[0].files[0],  //文件对象
                            fileNum = $("#file")[0].files[0].length,
                            name = file.name,        //文件名
                            size = file.size;       //总大小
                        //succeed =0;  //记录成功的片数
                        var shardSize = 2 * 1024 * 1024,    //以2MB为一个分片
                            shardCount = Math.ceil(size / shardSize);  //总片数
                        for (var i = 0; i < shardCount; ++i) {
                            //计算每一片的起始与结束位置
                            var start = i * shardSize,
                                end = Math.min(size, start + shardSize);
                            //构造一个表单,FormData是HTML5新增的
                            var form = new FormData();
                            form.append("data", file.slice(start, end));  //slice方法用于切出文件的一部分
                            form.append("name", name);
                            form.append("total", shardCount);  //总片数
                            form.append("index", i + 1);        //当前是第几片
                            //Ajax提交
                            $.ajax({
                                url: "Handler1.ashx",
                                type: "POST",
                                data: form,
                                async: true,        //异步
                                processData: false,  //很重要,告诉jquery不要对form进行处理
                                contentType: false,  //很重要,指定为false才能形成正确的Content-Type
                                success: function () {
                                    ++succeed;
                                    //显示上传了多少片
                                    $("#output").text(succeed + " / " + filesCountSum);
                                    var percent = ((succeed / filesCountSum).toFixed(2)) * 100;
                                    updateProgress(percent);
                                    if (succeed == filesCountSum) {
                                        $("#upload").removeClass("disabled");
                                        $("#reset").removeClass("disabled");
                                        $("#alertBox").addClass("alert alert-success");
                                        $("#alertBox").text("上传成功");
                                    }
                                },
                                error: function () {
                                    //如果失败则提示框显示
                                    $("#alertBox").addClass("alert alert-danger");
                                    $("#alertBox").text("上传失败");
                                }
                            });
                        }
                    })
                }
            }
        }
        //用来延时显示更好的效果
        function progress(percent, $element) {
            var progressBarWidth = percent * $element.width() / 100;
            $element.find('div').animate({ width: progressBarWidth }, 500).html(percent + "% ");
        }
        function updateProgress(percentage) {
            $('.progress .progress-bar')[0].style = "width:" + percentage + "%";
            $("#progressBar")[0].innerText = percentage + "%";
        }
 
        //重置
        function resetInpu() {
            $("input").each(function () {
                $("#output").text("")
                //标签清空进度条为0
                $(this).val("");
                $('.progress .progress-bar')[0].style = "width:0%";
                $("#progressBar")[0].innerText = "0%";
                //移除提示框内容、清空文本
                $("#alertBox").removeClass();
                $("#alertBox").text("");
            })
        }
    </script>
 
</head>
<body>
    <div class="container head">
        <div class="row">
            <div class="panel panel-primary">
                <div class="panel-heading">上传文件</div>
                <div class="panel-body">
 
                    <div class="" id="alertBox"></div>
 
 
                    <div class="input-group">
                        <span class="input-group-addon" id="basic-addon1">文件1</span>
                        <input type="file" id="file" class="form-control" placeholder="Username" aria-describedby="basic-addon1">
                    </div>
                    <br />
 
                    <div class="input-group">
                        <span class="input-group-addon" id="basic-addon1">文件2</span>
                        <input type="file" id="file2" class="form-control" placeholder="Username" aria-describedby="basic-addon1">
                    </div>
                    <br />
 
                    <div class="input-group">
                        <span class="input-group-addon" id="basic-addon1">文件3</span>
                        <input type="file" id="file3" class="form-control" placeholder="Username" aria-describedby="basic-addon1">
                    </div>
                    <br />
                   <!--  @* 进度条 *@-->
                    <div class="progress">
                        <div id="progressBar" class="progress-bar" role="progressbar" aria-valuemin="0" aria-valuemax="100">
                            456456
                        </div>
                    </div>
                    <!--@* 按钮 *@-->
                    <div class="col-md-12 text-center">
                        <button id="upload" οnclick="uploadFile();" class="btn btn-primary">上传</button>
 
                        <span id="output" style="font-size: 12px">等待</span>
 
                        <button id="reset" οnclick="resetInpu()" class="btn btn-primary">重置</button>
 
                    </div>
 
                    <form class="form-horizontal"></form>
                </div>
            </div>
        </div>
    </div>
</body>
</html>

转载于:https://www.cnblogs.com/Myq697752/p/7736241.html

Ajax是一种用于在客户端和服务器之间进行异步通信的技术,可以在不刷新整个网页的情况下更新部分网页内容。JSON是一种轻量级的数据交换格式,常用于在服务器和客户端之间传递数据。ashx是一种处理程序,用于在服务器上接收和处理Ajax请求。 "ajax json ashx实现列表页.rar"是一个压缩文件,可能包含一个使用以上技术实现的列表页的项目。 该项目可能包括一个ashx处理程序,用于接收Ajax请求并处理相关操作。程序可能使用JSON格式将数据从服务器发送到客户端,以便在列表页上更新显示。通过Ajax技术,用户可以在不刷新整个页面的情况下获取最新的数据,并在列表页上进行交互操作,如添加、删除或编辑列表项。 实现这个列表页可能涉及到以下步骤: 1. 创建一个ashx处理程序,用于处理列表页的请求。 2. 在客户端使用Ajax技术发送请求给服务器,请求列表数据。 3. 服务器接收到请求后,从数据库或其他数据源中获取数据,并将数据封装成JSON格式。 4. 服务器将封装好的JSON数据响应给客户端。 5. 客户端接收到响应后,解析JSON数据,并根据数据更新列表页的显示。 6. 在列表页上实现交互功能,如添加、删除或编辑列表项。 7. 根据用户的操作,使用Ajax技术发送相应的请求给服务器,进行数据的增删改操作。 8. 服务器接收到请求后,进行相应的操作,并响应结果给客户端。 9. 客户端接收到响应后,更新列表页的显示。 通过以上的步骤,可以实现一个使用AjaxJSONashx处理程序的列表页,用户可以在列表页上进行数据的增删改操作,并实时更新数据的显示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值