ajax+ashx+bootstrap上传文件

mac2022-06-30  20

<!--一般处理程序-->   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

相关资源:asp.net mvc Bootstrap Fileinput框架实现的文件上传
最新回复(0)