Todavía estoy tratando de entenderlo.
Puedo hacer que el usuario seleccione el archivo (o incluso varios) con la entrada del archivo:
<form>
<div>
<label>Select file to upload</label>
<input type="file">
</div>
<button type="submit">Convert</button>
</form>
Y puedo ver el submit
evento usando <fill in your event handler here>
. Pero una vez que lo hago, ¿cómo envío el archivo usando fetch
?
fetch('/files', {
method: 'post',
// what goes here? What is the "body" for this? content-type header?
}).then(/* whatever */);
javascript
fetch-api
deitch
fuente
fuente
Content-Type: multipart/form-data
en el encabezado de la solicitudRespuestas:
Este es un ejemplo básico con comentarios. La
upload
función es lo que estás buscando:fuente
Lo he hecho así:
fuente
FormData
objeto si todo lo que está cargando es el archivo (que es lo que quiere la pregunta original).fetch
aceptaráinput.files[0]
arriba como subody
parámetro.Una nota importante para enviar archivos con Fetch API
Hay que omitir el
content-type
encabezado de la solicitud Fetch. Luego, el navegador agregará automáticamente elContent type
encabezado, incluido el límite del formulario, que se ve comoEl límite del formulario es el delimitador de los datos del formulario.
fuente
Si desea varios archivos, puede usar esto
fuente
Para enviar un solo archivo, simplemente puede usar el
File
objeto de la matriz deinput
's.files
directamente como el valor debody:
en sufetch()
inicializador:Esto funciona porque
File
hereda deBlob
yBlob
es uno de losBodyInit
tipos permitidos definidos en el Estándar de recuperación.fuente
body: myInput.files[0]
causa la cantidad de bytes en memoria en el lado del cliente?express-fileupload
no se pudo analizar la secuencia de solicitud. PeroFormData
funciona como un encanto.express-fileupload
es una biblioteca del lado del servidor para manejarmultipart/form-data
solicitudes que contienen archivos, así que sí, no es compatible con este enfoque (que simplemente envía el archivo directamente como el cuerpo de la solicitud).La respuesta aceptada aquí es un poco anticuada. A partir de abril de 2020, un enfoque recomendado visto en el sitio web de MDN sugiere usar
FormData
y tampoco pide establecer el tipo de contenido. https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_FetchCito el fragmento de código por conveniencia:
fuente
FormData
solo funcionará si el servidor espera datos de formulario. Si el servidor quiere un archivo sin procesar como el cuerpo de la POST, la respuesta aceptada es correcta.Saltando del enfoque de Alex Montoya para múltiples elementos de entrada de archivos
fuente
El problema para mí fue que estaba usando un response.blob () para completar los datos del formulario. Aparentemente no puedes hacer eso al menos con react native, así que terminé usando
Fetch parece reconocer ese formato y enviar el archivo a donde apunta la uri.
fuente
Aquí está mi código:
html:
fuente