【问题标题】:FormData content length Limitation in Jquery, Ajax When sending Large Image Files In Using Array with FormDataJquery,Ajax中的FormData内容长度限制在使用带有FormData的数组时发送大图像文件
【发布时间】:2018-03-08 11:47:16
【问题描述】:

我有 3 个图像或多个图像数组,其总大小约为。 29mb 或以上。我尝试使用带有表单数据的 Ajax 将其发布到服务器端。但是当我尝试在 MVC 中使用 FormData 发布大数据时它显示错误是否有任何解决方案。当我尝试发布数据时,它在客户端显示错误意味着进入 request.fail 部分

这是我的 Jquery 代码

 var filess = new Array();
var num = 4;
var IsAlready = false;
$(document).ready(function() {
    document.getElementById('pro-image').addEventListener('change', readImage, false);

    $( ".preview-images-zone" ).sortable();

    $(document).on('click', '.image-cancel', function() {
    debugger;
        let no = $(this).data('no');
        let Id = this.id;
        $(".preview-image.preview-show-"+no).remove();
        for (var i = 0; i < filess.length; i++) {
          debugger;
             filess = $.grep(filess, function(value) {
  return value.name != Id;
        });
}
    });
});

function readImage() {

    if (window.File && window.FileList && window.FileReader) {
        var files = event.target.files;
        var output = $(".preview-images-zone");

          for (var i = 0; i < files.length; i++) {

             $.grep(filess, function (n) {
                 if (n.name == files[i].name) {
                     IsAlready = true;
                 }
             })
             if (IsAlready)
             {
                 alert("Same Name File Exist");
                  $("#pro-image").val('');
                  IsAlready = false;
                 return false;
             }
        }

        var anyWindow = window.URL || window.webkitURL;
          for (var i = 0; i < files.length; i++) {

            filess.push(files[i]);
        var file = null;
             file = files[i];

            if (!file.type.match('image')) continue;
            var objectUrl = anyWindow.createObjectURL(files[i]);
            var html =  '<div class="preview-image preview-show-' + num + '"  >' +
                            '<div class="image-cancel" data-no="' + num + '" id="' + files[i].name + '">x</div>' +
                            '<div class="image-zone"><img id="pro-img-' + num + '" src="' + objectUrl + '"></div>' +

                            '</div>';

                output.append(html);
                num = num + 1;

            window.URL.revokeObjectURL(files[i]);
        }
       $("#pro-image").val('');
    }
    else {
        console.log('Browser not support');
    }

}

$("#submit").click(function () {
    event.preventDefault();
    debugger;
    var url = "/Administration/CreateAlbum";
    var albumName = $("#AlbumName").val();
    var albumDescription = $("#AlbumDescription").val();
    var IsActive = $("#IsActive").val();
    var filess = new Array();
    var data = new FormData();
    data.append('albumName', albumName);
    data.append('albumDescription', albumDescription);
    data.append('IsActive', IsActive);
    $("#submit").prop("disabled", true);

    for (var i = 0; i < filess.length; i++) {

        data.append('image', filess[i] );
    }

    var request = $.ajax({
        url: url,
        enctype: 'multipart/form-data',
        type: 'POST',
        processData: false,
        contentType: false,
        cache: false,
        timeout: 600000,
        data: data
    });

    request.done(function (response) {
        $("#resultCode").html(response.ResultCode);
        $("#resultMessage").html(response.ResultMessage);
        $('#reasonCode').val("");
        $('#quantity').val("");
        $('#inventoryCode').val("");
        $('#unitCost').val("");


    });
    request.fail(function (jqXHR, textStatus) {
        alert("Request failed: " + textStatus);
    });

});

【问题讨论】:

  • 你遇到什么错误,请在这里描述
  • 您提供的代码仅初始化文件,实际数组为空。
  • 它转到请求失败部分并显示警报
  • 您的文件上传控件的引用在哪里?即 type="file" ???
  • 我应该检查 web.config 中的 maxRequestLength 和 maxAllowedContentLength 设置。如果你还没有设置它们,那么就这样做。看看这里。 stackoverflow.com/questions/11300232/…

标签: javascript c# jquery ajax asp.net-mvc


【解决方案1】:

如前所述,您需要在 web.config 中设置 maxAllowedContentLength

 <system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="YOUR SIZE"  />
      </requestFiltering>
    </security>
  </system.webServer>

谢谢

【讨论】:

    【解决方案2】:

    用于大文件上传。

    ini_set('upload_max_filesize', '10M'); ini_set('post_max_size', '10M');

    您的files 数组为空白,无需指定enctype。在 Ajax 中

    var files = array();
    

    如果你有多个文件,那么追加

     data.append('image[]', filess[i] );
    
    
    
    
    
    var filess = new Array();
    var num = 4;
    var IsAlready = false;
    $(document).ready(function() {
        document.getElementById('pro-image').addEventListener('change', readImage, false);
    
        $( ".preview-images-zone" ).sortable();
    
        $(document).on('click', '.image-cancel', function() {
        debugger;
            let no = $(this).data('no');
            let Id = this.id;
            $(".preview-image.preview-show-"+no).remove();
            for (var i = 0; i < filess.length; i++) {
              debugger;
                 filess = $.grep(filess, function(value) {
      return value.name != Id;
            });
    }
        });
    });
    
    function readImage() {
    
        if (window.File && window.FileList && window.FileReader) {
            var files = event.target.files;
            var output = $(".preview-images-zone");
    
              for (var i = 0; i < files.length; i++) {
    
                 $.grep(filess, function (n) {
                     if (n.name == files[i].name) {
                         IsAlready = true;
                     }
                 })
                 if (IsAlready)
                 {
                     alert("Same Name File Exist");
                      $("#pro-image").val('');
                      IsAlready = false;
                     return false;
                 }
            }
    
            var anyWindow = window.URL || window.webkitURL;
              for (var i = 0; i < files.length; i++) {
    
                filess.push(files[i]);
            var file = null;
                 file = files[i];
    
                if (!file.type.match('image')) continue;
                var objectUrl = anyWindow.createObjectURL(files[i]);
                var html =  '<div class="preview-image preview-show-' + num + '"  >' +
                                '<div class="image-cancel" data-no="' + num + '" id="' + files[i].name + '">x</div>' +
                                '<div class="image-zone"><img id="pro-img-' + num + '" src="' + objectUrl + '"></div>' +
    
                                '</div>';
    
                    output.append(html);
                    num = num + 1;
    
                window.URL.revokeObjectURL(files[i]);
            }
           $("#pro-image").val('');
        }
        else {
            console.log('Browser not support');
        }
    
    }
    
    $("#submit").click(function () {
        event.preventDefault();
        debugger;
        var url = "/Administration/CreateAlbum";
        var albumName = $("#AlbumName").val();
        var albumDescription = $("#AlbumDescription").val();
        var IsActive = $("#IsActive").val();
        var filess = new Array();
        var data = new FormData();
        data.append('albumName', albumName);
        data.append('albumDescription', albumDescription);
        data.append('IsActive', IsActive);
        $("#submit").prop("disabled", true);
    
        for (var i = 0; i < filess.length; i++) {
    
            data.append('image', filess[i] );
        }
    
        var request = $.ajax({
            url: url,
            enctype: 'multipart/form-data',
            type: 'POST',
            processData: false,
            contentType: false,
            cache: false,
            timeout: 600000,
            data: data
        });
    
        request.done(function (response) {
            $("#resultCode").html(response.ResultCode);
            $("#resultMessage").html(response.ResultMessage);
            $('#reasonCode').val("");
            $('#quantity').val("");
            $('#inventoryCode').val("");
            $('#unitCost').val("");
    
    
        });
        request.fail(function (jqXHR, textStatus) {
            alert("Request failed: " + textStatus);
        });
    
    });
    

    【讨论】:

    • 我这里没有写数组的代码。在数组中有我想知道 FormData Content Lenth Limit 的文件
    • 不,没有大小上传限制
    • 但是使用 FormData 为什么没有发布最大数据?
    • 如果您收到最大文件上传大小错误,那么您需要设置;上传文件的允许大小。 upload_max_filesize = 40M ;必须大于等于upload_max_filesize post_max_size = 40M
    • 是的,我在这里更新了 HTML,也检查一下 @Mayank Majithiya 我不知道什么是错误。但是如果我发送小数据,那么它可以工作,但不会发布 25-30 Mb 或以上
    猜你喜欢
    • 1970-01-01
    • 2018-11-14
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    相关资源
    最近更新 更多