0

I have 3 Image or Multiple Images Array whose total size is approx. 29mb or above. I am try to post it on server Side using Ajax with Form data. But It shows error when i try to post large data using FormData in MVC is there any solution. when i try to post data it shows error on client side means go into the request.fail section

This is My Jquery Code

 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);
    });

});
Anshul
  • 61
  • 1
  • 7

2 Answers2

1

As discussed, you need to set the maxAllowedContentLength in the web.config

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

thanks

Wheels73
  • 2,850
  • 1
  • 11
  • 20
0

For large file upload.

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

your files array is blank and no need to specify enctype. Here in Ajax

var files = array();

if you have multiple files,then append like

 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);
    });

});
Mayank Majithia
  • 1,916
  • 16
  • 21