Ajax上传文件并显示进度条

最近在学ASP.NET MVC,正好做到文件上传,记录一下。
前端除了jQuery还用了Bootstrap和Layer。

HTML页面里的表单:

class="form-horizontal" id="vform" action=""> <div class="form-group"> <div class="col-sm-8"> name="name" type="text" class="form-control" id="name" /> div> div> <div class="form-group"> <div class="col-sm-8"> name="file" type="file" class="form-control" id="file" /> <div class="progress"> <div class="progress-bar" id="progress-bar">div> div> div> div> <div class="form-group"> <div class="col-sm-4 col-sm-offset-3"> class="btn btn-primary" id="submit" value="确认上传" /> div> div>

JavaScript代码:

<script>
    $("#submit").click(function () {
        var formData = new FormData(document.getElementById("vform"));
        $.ajax({
            type: "POST",
            url: "@Url.Action("DoAdd")",
            data: formData,
            processData: false,
            contentType: false,
            error: function (data) {
                layer.msg('上传失败', {
                    icon: 2,
                    time: 1000 //1秒关闭(如果不配置,默认是3秒)
                });
            },
            success: function (data) {
                if (data.code == 1) {
                    layer.msg('上传成功', {
                        icon: 1,
                        time: 1000 //1秒关闭(如果不配置,默认是3秒)
                    }, function () {
                        parent.location.reload();
                    });
                }
                else {
                    layer.msg(data.msg, {
                        icon: 2,
                        time: 1000 //1秒关闭(如果不配置,默认是3秒)
                    });
                }
            },
            xhr: function () {
                myXhr = $.ajaxSettings.xhr();
                if (myXhr.upload) { //检查upload属性是否存在  
                    //绑定progress事件的回调函数  
                    myXhr.upload.addEventListener('progress', progressHandlingFunction, false);
                }
                return myXhr; //xhr对象返回给jQuery使用
            }
        });
    });

    function progressHandlingFunction(event) {
        var loaded = Math.floor(100 * (event.loaded / event.total)); //已经上传的百分比
        $("#progress-bar").html(loaded + "%").css("width", loaded + "%");
    }
script>

你可能感兴趣的:(Ajax上传文件并显示进度条)