fetch - Límite faltante en multipart / form-data POST
Gracias por venir.
Quiero enviar un new FormData()
como el body
de una solicitud POST
usando la api fetch
La operación se ve algo como esto
var formData = new FormData()
formData.append('myfile', file, 'someFileName.csv')
fetch('https://api.myapp.com',
{
method: 'POST',
headers: {
"Content-Type": "multipart/form-data"
},
body: formData
}
)
El problema aquí es que el límite, algo así como {[13]]}
boundary=----WebKitFormBoundaryyEmKNDsBKjB7QEqu
Nunca llega a la cabecera Content-Type:
Debería verse así
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryyEmKNDsBKjB7QEqu
Cuando se intenta la" misma " operación con un new XMLHttpRequest()
, como so
var request = new XMLHttpRequest()
request.open("POST", "https://api.mything.com")
request.withCredentials = true
request.send(formData)
Los encabezados están correctamente configurados
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryyEmKNDsBKjB7QEqu
Así que mi pregunta es,
¿Cómo hago que
fetch
se comporte exactamente comoXMLHttpRequest
en esta situación?Si esto no es posible, ¿por qué?
Gracias a todos! Esta comunidad es más o menos la razón por la que tengo éxito profesional.
4 answers
La solución al problema es establecer explícitamente Content-Type
a undefined
para que su navegador o cualquier cliente que esté utilizando pueda configurarlo y agregar ese valor de límite allí para usted. Decepcionante pero cierto.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-13 16:04:59
Estoy usando el aurelia-api (un contenedor para aurelia-fetch-client). En este caso, el tipo de contenido predeterminado es 'application / json'. Así que puse el Content-Type en undefined y funcionó como un encanto.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-12 02:32:14
fetch(url,options)
- Si establece una cadena como
options.body
, debe establecer elContent-Type
en el encabezado de la solicitud ,o serátext/plain
por defecto. -
If opciones.el cuerpo es un objeto específico como
let a = new FormData()
olet b = new URLSearchParams()
, no es necesario establecer elContent-Type
por hand.It se añadirá automáticamente.- para
a
, será algo así como
multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
Como puede ver, el límite se agrega automáticamente.
- para
b
esapplication/x-www-form-urlencoded;
- para
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-23 13:14:52
Add headers:{content-type: undefined}
el navegador generará un límite para usted
esto es para subir un archivo parte y parte con streaming
si está agregando 'multiple / form-data' significa que debe crear streaming y cargar su archivo parte y parte
Así que está bien agregar solicitud.headers = {content-type: undefined}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-10-04 13:04:32