w3schools formdata form data array xmlhttprequest multipartform-data boundary

array - Cómo establecer mi propio límite en multipart/form-data usando el objeto XMLHttpRequest y FormData



formdata() javascript (2)

He estado intentando encontrar una manera de establecer mi propio límite en un objeto XMLHttpRequest cuando uso el objeto FormData para anexar archivos a una solicitud. He visto varias publicaciones sobre esto y todo el mundo dice "simplemente no establezca el límite y se generará automáticamente para usted". Esto no es lo que quiero. Déjame explicar lo que necesito para no obtener este tipo de respuestas.

Tengo un punto final del servicio web al que envío una solicitud multipart / form-data con dos imágenes y algunos datos json. Como WCF no tiene forma de analizar a través de una solicitud de varias partes, construí mi propio analizador utilizando algún código fuente abierto. La forma en que funciona es que defino un límite que se utiliza para separar cada sección de la solicitud y desde allí todo funciona Hunky Dory. Como tal, tengo que ser capaz de establecer el límite de exactamente lo que el código del servidor espera para que mis clases de análisis puedan encontrar algo en la secuencia de entrada.

Sé que esto se puede hacer porque lo he hecho usando Fiddler y un compañero de trabajo puede hacerlo en la aplicación que estamos creando que llama a mi método, pero estoy tratando de hacerlo funcionar usando una aplicación de navegador Chrome llamada Postman que envía solicitudes multiparte utilizando el objeto FormData. Está funcionando, además del hecho de que las solicitudes generan su propio límite que generalmente es algo así como:

----WebKitFormBoundaryQUWQnB6c7TzNzdcz

Y la cadena adjunta en el extremo se genera de forma aleatoria, por lo que nunca es la misma, por lo tanto, no puedo usar esta herramienta para probar mi punto final porque el servidor no tiene forma de saber qué límite buscar.

Intenté configurar el encabezado Content-Type con mi límite y mientras la solicitud muestra el encabezado que se agrega a la solicitud, el cuerpo todavía usa el límite aleatorio.

Entonces, la pregunta es ¿cómo puedo decirle al objeto FormData y / o al objeto XMLHttpRequest que use mi límite en lugar del objeto aleatorio que se está generando?

No me puedo imaginar que esto sea algo fuera de lo común, quiero decir que hasta ahora toda mi experiencia en servicios de llamadas que usan multipart / form-data me dice a qué establecer el límite en la API y nadie ha dicho "solo don ''configúrelo y usaremos la basura al azar que se genera ...''

También como visual, esto es lo que estoy viendo en los encabezados:

Request Headers POST /DHICachet.svc/json/DepositCheck HTTP/1.1 Host: dhiibews.securexfr.com Connection: keep-alive Content-Length: 514696 Origin: chrome-extension://fdmmgilgnpjigdojojpjoooidkmcomcm User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11 Content-Type: multipart/form-data; boundary=myboundary Cache-Control: no-cache Accept: */* Accept-Encoding: gzip,deflate,sdch Accept-Language: en-US,en;q=0.8 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 Cookie: ASP.NET_SessionId=zdepe2nhkz0vbhxiulzc2qq1 Request Payload ------WebKitFormBoundaryQUWQnB6c7TzNzdcz Content-Disposition: form-data; name="item"; filename="Screen shot 2012-09-03 at 4.00.10 AM.png" Content-Type: image/png ------WebKitFormBoundaryQUWQnB6c7TzNzdcz--

Tenga en cuenta que aunque mi límite se establece en myboundary en el encabezado de solicitud, el cuerpo simplemente pone cualquier frontera que se genere detrás de las escenas. También tenga en cuenta que si no configuro ese encabezado, simplemente lo coloca con el límite aleatorio en él .


Esto realmente no responde mi pregunta, pero encontré un trabajo alternativo. Me di cuenta de que realmente podía detectar el límite que se venía haciendo algunas operaciones matemáticas en el encabezado de tipo de contenido. Acabo de agregar lo siguiente a mi código:

string contenttype = _ctx.IncomingRequest.Headers["Content-Type"].ToString(); string boundary = contenttype.Substring(contenttype.IndexOf(''='') + 1);

Esto me permite aceptar cualquier límite para la depuración. Todavía requeriré nuestro límite específico para la producción.


Tuve un problema similar y, para mí, configurar el encabezado del tipo de contenido como undefined cuando la publicación solucionó el problema ... ''Content-Type'': undefined

Creo que el navegador maneja automáticamente POST de FormData correctamente y establece el encabezado Content-type esperado, incluido el límite si no está configurado. Esto significa que no es necesaria una lógica de análisis especial de los encabezados de solicitud en el servidor.