Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

222
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda