• 【ASP.NET MVC】HTML5+MVC上传文件显示进度


    head>
        <title>Index</title>
        <style type="text/css">
            #statusBorder
            {
                position:relative;
                height:5px;
                100px;
                border:solid 1px gray;
                display:none;
                }
            #statusFill{
                position:absolute;
                top:0;
                left:0;
                0px;
                background-color:Blue;
                height:5px;
    }
        </style>
        <script src="../../Scripts/jquery-1.5.1.min.js" type="text/javascript"></script>
        <script type="text/javascript">
            var uniqueId = " @Guid.NewGuid().ToString()";
    
            $(document).ready(function (event) {
                $('#startProcess').click(function () {
                    $.post("Home/StartLongRunningProcess",{ id: uniqueId }, function (data) {
                        if (data = "null") {
                            alert("文件为空!");
                        }
                        else {
                            $('#statusBorder').show();
                            getStatus();
                        }
                    }, "multipart/form-data");
                    event.preventDefault;
                });
            });
    
            function getStatus() {
                var url = 'Home/GetCurrentProgress/' + uniqueId;
                $.get(url, function (data) {
                    if (data != "100") {
                        $('#status').html(data);
                        $('#statusFill').width(data);
                        window.setTimeout("getStatus()", 100);
                    }
                    else {
                        $('#status').html("Done");
                        $('#statusBorder').hide();
                        alert("文件保存成功");
                    };
                });
            }
        </script>
    </head>
    <body>
        <div>
         <div id="status">
                </div>
            <h2>@Html.Encode(ViewData["Message"]) </h2>
            <div>
                <input id="File1" type="file" name="file" />
                <input id="startProcess" type="submit" value="提交" />
            </div>
            <br />
            <div id="statusBorder">
                <div id="statusFill">
                </div>
            </div>
        </div>
    </body>
    </html>

    Action代码

        public class HomeController : Controller
        {
            //
            // GET: /Home/
    
            public ActionResult Index()
            {
                ViewData["Message"] = "Ajax Progress Bar Example";
                return View();
            }
    
            delegate string ProcessTask(string id);
            MyLongRunningClass longRunningClass = new MyLongRunningClass();
    
            public ContentResult StartLongRunningProcess(string id)
            {
                var file=Request.Files["file"];
                if (file != null)
                {
                    file.SaveAs(Server.MapPath("~/Content/" + file.FileName));
                    longRunningClass.Add(id);
                    ProcessTask processTask = new ProcessTask(longRunningClass.ProcessLongRunningAction);
                    processTask.BeginInvoke(id, new AsyncCallback(EndLongRunningProcess), processTask);
                    return Content("ok");
                }
                else
                {
                    return Content("null");
                }
            }
    
            public void EndLongRunningProcess(IAsyncResult result)
            {
                ProcessTask processTask = (ProcessTask)result.AsyncState;
                string id = processTask.EndInvoke(result);
                longRunningClass.Remove(id);
            }
    
            public ContentResult GetCurrentProgress(string id)
            {
                this.ControllerContext.HttpContext.Response.AddHeader("cache-control", "no-cache");
                var currentProgress = longRunningClass.GetStatus(id).ToString();
                return Content(currentProgress);
            }
            public ActionResult Upload(HttpPostedFileBase[] fileToUpload)
            {
                ViewBag.Message = "File(s) uploaded successfully"; 
                return RedirectToAction("Index");
            }

    cs代码

    public class MyLongRunningClass
        {
            private static object syncRoot = new object();
    
            private static IDictionary<string, int> ProcessStatus { get; set; }
    
            public MyLongRunningClass()
            {
                if (ProcessStatus == null)
                {
                    ProcessStatus = new Dictionary<string, int>();
                }
            }
    
            public string ProcessLongRunningAction(string id)
            {
                for (int i = 1; i <= 100; i++)
                {
                    Thread.Sleep(100);
                    lock (syncRoot)
                    {
                        ProcessStatus[id] = i;
                    }
                }
                return id;
            }
    
            public void Add(string id)
            {
                lock (syncRoot)
                {
                    ProcessStatus.Add(id,0);
                }
            }
    
            public void Remove(string id)
            {
                lock (syncRoot)
                {
                    ProcessStatus.Remove(id);
                }
            }
    
            public int GetStatus(string id)
            {
                lock (syncRoot)
                {
                    if (ProcessStatus.Keys.Count(x => x == id) == 1)
                    {
                        return ProcessStatus[id];
                    }
                    else
                    {
                        return 100;
                    }
                }
            }
        }
  • 相关阅读:
    读图,特征提取——形状
    5.2 SW1控制LED1亮灭(中断功能)
    3、寄存器
    5.1、按键SW1控制LED1亮灭
    4.2、LED1、LED2交替闪烁
    2、编程工具IAR、烧写工具SmartRF的使用
    4.1、实现4个LED灯同时闪烁
    1、CC2530单片机介绍
    装windows系统教程
    连接夜神模拟器
  • 原文地址:https://www.cnblogs.com/wywnet/p/3406832.html
Copyright © 2020-2023  润新知