react fetching example data javascript xmlhttprequest fetch form-data fetch-api

example - fetching data javascript



fetch-Falta el lĂ­mite en multipart/form-data POST (4)

Agregue headers:{content-type: undefined} navegador generará un límite para usted que es para cargar un archivo parte y parte con transmisión si está agregando ''datos múltiples / formulario'', esto significa que debe crear transmisión y cargar su presentar parte y parte

Por lo tanto, está bien agregar request.headers = {content-type: undefined}

gracias por pasar.

Quiero enviar un new FormData() como el body de una solicitud POST usando la api de búsqueda

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

boundary=----WebKitFormBoundaryyEmKNDsBKjB7QEqu

nunca lo hace en el tipo de Content-Type: encabezado

Debe tener un aspecto como este

Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryyEmKNDsBKjB7QEqu

cuando intenta la "misma" operación con un new XMLHttpRequest() , como tal

var request = new XMLHttpRequest() request.open("POST", "https://api.mything.com") request.withCredentials = true request.send(formData)

los encabezados están correctamente establecidos

Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryyEmKNDsBKjB7QEqu

entonces mi pregunta es

  1. ¿Cómo hago que fetch comporte exactamente como XMLHttpRequest en esta situación?

  2. 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.


Estoy usando aurelia-api (una envoltura para aurelia-fetch-client). En este caso, el valor predeterminado de Content-Type es ''application / json''. Así que configuré el tipo de contenido como indefinido y funcionó a la perfección.


La solución al problema es establecer Content-Type explícitamente en undefined para que su navegador o cualquier cliente que esté usando pueda configurarlo y agregar ese valor de límite allí para usted. Decepcionante pero cierto.


fetch(url,options)

  1. Si configura una cadena como options.body , debe establecer el Content-Type en el encabezado de solicitud, o será text/plain de forma predeterminada.
  2. Si options.body es un objeto específico como let a = new FormData() o let b = new URLSearchParams() , no tiene que configurar el Content-Type mano. Se agregará automáticamente.

    • para a , será algo así como

    multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW

    Como ves, el límite se agrega automáticamente.

    • para b , es application/x-www-form-urlencoded;