【问题标题】:404 after posting a big file with .net使用 .net 发布大文件后出现 404
【发布时间】:2017-01-13 07:00:29
【问题描述】:

我有下面的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 控制器上我有这个代码:

[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。

【问题讨论】:

  • 您是否更新了 MVC web.config 以确保它允许 50mb 文件?
  • nop,你能粘贴我需要编辑的部分吗?
  • 也只是检查一下,一旦你上传了小文件,你能在服务器上找到它们吗?

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-04
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多