Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

221
Vistas
Error al intentar enviar una matriz de bytes de 100 mb de js a c # usando ajax

Así que he estado haciendo esto durante unos días y me encuentro con un problema. Estoy tratando de hacer una llamada ajax que envíe un byte[] al controlador en C#.

 var data = { FtpUpload: self.Upload(), Attachment: self.Attachment() }; Base.ServiceCall("/Home/Upload", "post", data, true, function (response) {...}

self.Attachment() contiene una propiedad para el 'byte[]'. Estoy usando esto para leer la matriz de bytes del archivo que funciona según lo planeado.

 self.OnImageUpload = function (vm, evt) { var file = evt.target.files[0]; var reader = new FileReader(); reader.onload = function () { var attachment = { ... Attachment: reader.result.split(',')[1] }; self.Attachment(attachment); } reader.readAsDataURL(file); };

Cuando hago esto con un archivo de 17 mb, funciona bien, pero cuando lo hago con un archivo de 109 mb, arroja un error 500 que dice esto.

 [OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.] System.Web.Util.HttpEncoder.UrlDecode(Byte[] bytes, Int32 offset, Int32 count, Encoding encoding) +76 System.Web.HttpValueCollection.FillFromEncodedBytes(Byte[] bytes, Encoding encoding) +164 System.Web.HttpRequest.FillInFormCollection() +77 [HttpException (0x80004005): The URL-encoded form data is not valid.] System.Web.HttpRequest.FillInFormCollection() +130 System.Web.HttpRequest.EnsureForm() +69 System.Web.HttpRequest.get_Form() +13 System.Web.HttpRequestWrapper.get_Form() +14

He agregado la configuración adecuada a mi web.config para permitir archivos más grandes como este.

 <system.web> <httpRuntime targetFramework="4.6" maxRequestLength="2147483647" executionTimeout="1600" requestLengthDiskThreshold="2147483647" /> </system.web> <system.webServer> <security> <requestFiltering> <requestLimits maxAllowedContentLength="2147483647" /> </requestFiltering> </security> </system.webServer>

No estoy seguro de qué más hacer.

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Según el seguimiento de la pila, su llamada está fallando dentro HttpEncoder.UrlDecode , lo cual solo es posible si está enviando su imagen como application/x-www-form-urlencoded que puede o no ser la mejor opción cuando se trata de datos binarios pesados. .

Independientemente del tipo de contenido que elija usar, tendrá que volver a implementar su acción de publicación usando el parámetro HttpPostedFileBase que le proporciona el método InputStream.Read en lugar de esperar el byte[] del formulario de solicitud, consulte a continuación.

 [HttpPost] public JsonResult Upload(HttpPostedFileBase uploadedFile) ... byte[] fileByteArray = new byte[uploadedFile.ContentLength]; uploadedFile.InputStream.Read(fileByteArray, 0, uploadedFile.ContentLength); ...

Puede ver en el ejemplo que el parámetro de acción tiene que ser HttpPostedFileBase para transmitir el archivo en lugar de enviar/recibir como una matriz completa de datos binarios.

Eche un vistazo al siguiente proyecto a continuación https://www.codeproject.com/Articles/1021004/Upload-File-Using-Ajax-And-HTML-in-MVC

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda