404用.net发布一个大文件后

时间:2016-09-05 22:49:11

标签: javascript c# asp.net-mvc asp.net-mvc-4 asp.net-web-api

我有以下JS代码,此函数调用WEBAPI服务,该服务接收文件并将其保存到服务器。

请检查.onfail,

文件大小为500MB

function GuardarOrigen() {
        var NombreOrigen = $("#Nombre").val()
        if (NombreOrigen == '') {
            info('Debe ingresar un nombre');
            return;
        }
        var rgx = new RegExp("^[a-zA-Z0-9]+$");

        if (!rgx.test(NombreOrigen)) {
            info('El nombre no debe tener espacios en blanco ni caracteres especiales.');
            return;
        }
        var files = $('#Archivo').get(0).files;

        if (files.length > 0) {
            if (window.FormData !== undefined) {
                var data = new FormData();
                for (var x = 0; x < files.length; x++) {
                    data.append("file" + x, files[x]);
                }



                $("#bntGuardar").prop('disabled', true);
                $("#imgLoader").show();
                $.ajax({
                    url: urlCrearOrigen + '?NombreOrigen=' + NombreOrigen,
                    method: "POST",
                    contentType: false,
                    processData: false,
                    data: data,
                    success: function (result) {
                        info("Guardado con éxito.");
                        window.location.href = urlEditarOrigen + result
                    },
                }).fail(function (jqXHR, textStatus) {
                    info("Error guardando el origen");

                    console.log('Error:' + jqXHR.responseText + textStatus);

                }).always(function () {
                    $("#imgLoader").hide();
                    $("#bntGuardar").prop('disabled', false);


                });
            }
        } else {
            info('Debe seleccionar el archivo');
        }

    }

在WEB API Controller上我有这段代码:

[HttpPost]
        [Route("/CrearOrigen")]
        public async System.Threading.Tasks.Task<HttpResponseMessage> CrearOrigen(string NombreOrigen)
        {

            if (!Request.Content.IsMimeMultipartContent())
            {
                return this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "No se recibieron archivos");

            }

            string root = HttpContext.Current.Server.MapPath("~/App_Data/CargaOrigenes");
            if (!Directory.Exists(root))
            {
                Directory.CreateDirectory(root);
            }
            var provider = new MultipartFormDataStreamProvider(root);
            await Request.Content.ReadAsMultipartAsync(provider);
            if (provider.FileData.Count == 0)
            {
                return this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Parámetros invalidos - sin archivo");
            }

            string FileName = provider.FileData[0].LocalFileName;
            string[] FileParts = provider.FileData[0].LocalFileName.Split(Convert.ToChar("."));
            string FileExt = String.Empty;
            if (provider.FileData[0].Headers.ContentDisposition.FileName.Contains(".csv"))
            {
                FileExt = "csv";
            }
            else
            {
                return this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Archivo no soportado");
            }

            try
            {

                CargasMasivasManager cmm = new CargasMasivasManager();
                int idOrigen = cmm.CrearOrigen(FileName, FileExt, NombreOrigen);

                return this.Request.CreateResponse(HttpStatusCode.OK, idOrigen.ToString());
            }
            catch (Exception e)
            {
                return this.Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e.Message);
            }

        }

10或15分钟后,我得到404,您要查找的资源不在服务器上或不可用。

但是当文件较小时,过程正常。

此外,这在本地工作,但当部署在一台服务器上时,我收到错误,我无法在服务器上进行调试,因为我无法在那里安装Visual Studio。

1 个答案:

答案 0 :(得分:1)

尝试更新您的web.config以允许大文件

<configuration>
  <system.web>
    <httpRuntime maxRequestLength="xyz" />
  </system.web>
</configuration>

xyz在KB,所以2048kb = 2mb。 所以500mb = 512000kb