如何使用 asp.net 核心在 Ajax 中上传带有进度条的文件

how to Upload files with progress bar in Ajax with asp.net core

我用Ajax写了文件上传代码,它们工作正常,但我无法写出文件上传进度的百分比。我想为进度百分比使用进度条。请用进度条编写我的代码示例。谢谢

我用Ajax写了文件上传代码,它们工作正常,但我无法写出文件上传进度的百分比。我想为进度百分比使用进度条。请用进度条编写我的代码示例。谢谢

  <td class="d-flex justify-content-around">

                <div>
                    <label asp-for="mostanadPath" class="btn btn-outline-info">
                        انتخاب تصویر
                        <span class="oi oi-file h5 text-dark"></span>

                    </label>
                    <span class="text-center mt-2" id="spnImageCartMlie" style="color: black;font-size: 12px"></span>

                </div>
                <div>
                    <input type="button" onclick="UploadImage()" value="آپلود فایل" class="btn btn-outline-danger" id="btnUpLoad" />

                    <div id="divmessage" class="text-center hidden m-2"></div>

                    <input class="d-none" value="@ViewBag.proID" name="id" />
                </div>
                <input id="newCartMlieImagePathName" name="newCartMlieImagePathName" hidden />
                <input id="mostanadPath" asp-for="mostanadPath" type="file" class="d-none">

                <div class="mt-5 col-6">
                    <div class="progress">
                        <div class="progress-bar progress-bar-success progress-bar-striped
                            active" role="progressbar"
                             aria-valuemin="0" aria-valuemax="100" style="width:0%">0%</div>

                    </div>
                </div>


            </td>

<script>
    $("#mostanadPath").change(function () {
        var filename = this.files[0].name;
        $("#spnImageCartMlie").html(filename);
    });
</script>


<script>
    var UploadImage = function () {
        var data = new FormData;
        var file = $("#mostanadPath").get(0);
        var files = file.files;
        //کنترل سایز فایل
        if (files[0].size >= 5120000) {
            $("#spnImageCartMlie").removeClass('hidden');
            $("#spnImageCartMlie").text('حجم فایل بیش از 500 کیلوبایت است');
            $("#spnImageCartMlie").css("color", "red");
            return false;
        }


        for (var i = 0; i < files.length; i++) {
            data.append('filearray', files[i]);
            data.append('filesize', files[i].size);
        }
        data.append('path', "img\mostandat\");

        $.ajax({
            xhr: function () {
                var xhr = new window.XMLHttpRequest();

                xhr.upload.addEventListener("progress", function (evt) {
                    if (evt.lengthComputable) {
                        var percentComplete = evt.loaded / evt.total;
                        percentComplete = parseInt(percentComplete * 100);

                        $('.progress-bar').width(percentComplete + '%');
                        $('.progress-bar').html(percentComplete + '%');

                    }
                }, false);

                return xhr;
            },
            url: '@Url.Action("UploadImageFile", "Project")',
            type: "POST",
            data: data,
            contentType: false,
            processData: false }).done(function (result) {
            if (result.status == "success") {

                toastr.success('فایل با موفقیت آپلود شد', {
                    timeOut: 2000,
                    closeButton: true,
                });


                $("#newCartMlieImagePathName").val(result.imagename);
            }

        }).fail(function (result) {
            if (result.status != "success") {
                toastr.warning('در حین آپلود مشکلی بوجود آمد', {
                    timeOut: 2000,
                    closeButton: true,
                });

            }
        });
    }
</script>

public IActionResult UploadImageFile(IEnumerable<IFormFile> filearray, String path)
{

    String fileName = _uploadFiles.UploadFilesFunc(filearray, path);

    return Json(new { status = "success", imagename = fileName });

}

您可以在 <script>:

中使用此 JQuery 代码
$.ajax({
  xhr: function() {
  var xhr = new window.XMLHttpRequest();

  xhr.upload.addEventListener("progress", function(evt) {
    if (evt.lengthComputable) {
      var percentComplete = evt.loaded / evt.total;
      percentComplete = parseInt(percentComplete * 100);

      $('.progress-bar').width(percentComplete+'%');
      $('.progress-bar').html(percentComplete+'%');

     }
  }, false);

   return xhr;
  },
  url: yoururl,
  type: "POST",
  data: data,
  contentType: false,
  processData: false
  success: function(result) {
    console.log(result);
  }
});

并在您的页面中添加此代码

<div class="progress">
   <div class="progress-bar progress-bar-success progress-bar-striped 
    active" role="progressbar"
    aria-valuemin="0" aria-valuemax="100" style="width:0%">0%</div>
</div>

上传文件时可以看到进度条。

============================================= ==

如果你只想要一个按钮,你可以使用这个代码:

<input type="file" id="files" />


<script>
$("#files").change(function () {
  $.ajax({

     //........

   });
})
</script>

======================================== =========

我只是将上面给你的代码添加到 ajax

<div class="container mt-4 col-2">
    
        <table class="table table-bordered">
     
            <tbody class="text-center">
                <tr>
                    <td>
                        <label asp-for="mostanadPath" class="btn btn-outline-info">
                            Image selection
                            <span class="oi oi-file h5 text-dark"></span>
    
                        </label>
                    </td>
    
                </tr >
                <tr>
                    <td>
                        <span class="text-center" id="spnImageCartMlie" style="color: black;font-size: 12px"></span>
                        <input id="newCartMlieImagePathName" name="newCartMlieImagePathName" hidden />
    
                    </td>
                </tr>
    
                <tr>
                    <td>
                        <input type="button" onclick="UploadImage()" value="Upload and display the image" class="btn btn-outline-danger" id="btnUpLoad" />
                    </td>
                </tr>
                <tr>
                    <td>
                        <div id="divmessage" class="text-center hidden"></div>
                    </td>
                </tr>
            </tbody>                
        </table>
    
        <input asp-for="mostanadPath" type="file" class="d-none" >
    
    </div>

<div class="progress">
   <div class="progress-bar progress-bar-success progress-bar-striped 
    active" role="progressbar"
    aria-valuemin="0" aria-valuemax="100" style="width:0%">0%</div>
</div>

@section Scripts {

    <script>
        $("#mostanadPath").change(function () {
            var filename = this.files[0].name;
            $("#spnImageCartMlie").html(filename);
        });
    </script>


    <script>
        var UploadImage = function () {
            var data = new FormData;
            var file = $("#mostanadPath").get(0);
            var files = file.files;
            //File size control
            if (files[0].size >= 512000) {
                $("#spnImageCartMlie").removeClass('hidden');
                $("#spnImageCartMlie").text('The file size is more than 500 KB');
                $("#spnImageCartMlie").css("color", "red");
                return false;
            }


            for (var i = 0; i < files.length; i++) {
                data.append('filearray', files[i]);
                data.append('filesize', files[i].size);
            }
            data.append('path', "img\mostandat\");

            $.ajax({
             //add here......
                xhr: function() {
                  var xhr = new window.XMLHttpRequest();

                  xhr.upload.addEventListener("progress", function(evt) {
                    if (evt.lengthComputable) {
                      var percentComplete = evt.loaded / evt.total;
                      percentComplete = parseInt(percentComplete * 100);

                      $('.progress-bar').width(percentComplete+'%');
                      $('.progress-bar').html(percentComplete+'%');

                     }
                  }, false);

                   return xhr;
                  },


                type: "post",
                  url: '/Home/UploadImageFile',
                data: data,
                contentType: false,
                processData: false
            }).done(function (result) {
                if (result.status == "success") {
                    $("#divmessage").text("Upload was successful.");
                    $("#divmessage").css("color", "green");
                    $("#divmessage").removeClass("hidden");


                    $("#newCartMlieImagePathName").val(result.imagename);
                }

            }).fail(function (result) {
                if (result.status != "success") {
                    $("#divmessage").css("color", "red");
                    $("#divmessage").removeClass("hidden");
                    $("#divmessage").text("There was a problem uploading.");
                }
            });


        }
    </script>
}