subir que para method formulario form example data atributo archivos html http multipart multipartform-data

html - que - Ejemplo de multipart/form-data



formulario para subir archivos en html (2)

Me pregunto si alguien puede compartir conmigo un ejemplo de multipart / form-data que contenga:

  1. Algunos parámetros de forma
  2. Múltiples archivos

¡Muchas gracias a la respuesta de @Ciro Santilli! Descubrí que su elección de límite es bastante "infeliz" porque todos estos guiones: de hecho, como @Fake Name comentó, cuando usa su límite dentro de la solicitud, viene con dos guiones más en el frente:

Ejemplo:

POST / HTTP/1.1 HOST: host.example.com Cookie: some_cookies... Connection: Keep-Alive Content-Type: multipart/form-data; boundary=12345 --12345 Content-Disposition: form-data; name="sometext" some text that you wrote in your html form ... --12345 Content-Disposition: form-data; name="name_of_post_request" filename="filename.xyz" content of filename.xyz that you upload in your form with input[type=file] --12345 Content-Disposition: form-data; name="image" filename="picture_of_sunset.jpg" content of picture_of_sunset.jpg ... --12345--

Encontré en esta página w3.org que es posible encapsular encabezado multipart / mixed en multipart / form-data, simplemente seleccionando otra cadena de límite dentro de multipart / mixed y usando esa para encapsular datos. Al final, debe "cerrar" todos los límites utilizados en orden FILO para cerrar la solicitud POST (como:

POST / HTTP/1.1 ... Content-Type: multipart/form-data; boundary=12345 --12345 Content-Disposition: form-data; name="sometext" some text sent via post... --12345 Content-Disposition: form-data; name="files" Content-Type: multipart/mixed; boundary=abcde --abcde Content-Disposition: file; file="picture.jpg" content of jpg... --abcde Content-Disposition: file; file="test.py" content of test.py file .... --abcde-- --12345--

Eche un vistazo al enlace de arriba.


EDITAR : Estoy manteniendo una respuesta similar, pero más detallada en: https://.com/a/28380690/895245

Para ver exactamente qué está sucediendo, use nc -l o un servidor ECHO y un agente de usuario como un navegador o cURL.

Guarde el formulario en un archivo .html :

<form action="http://localhost:8000" method="post" enctype="multipart/form-data"> <p><input type="text" name="text" value="text default"> <p><input type="file" name="file1"> <p><input type="file" name="file2"> <p><button type="submit">Submit</button> </form>

Crea archivos para cargar:

echo ''Content of a.txt.'' > a.txt echo ''<!DOCTYPE html><title>Content of a.html.</title>'' > a.html

Correr:

nc -l localhost 8000

Abra el HTML en su navegador, seleccione los archivos y haga clic en enviar y verifique la terminal.

nc imprime la solicitud recibida. Firefox enviado:

POST / HTTP/1.1 Host: localhost:8000 User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:29.0) Gecko/20100101 Firefox/29.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Cookie: __atuvc=34%7C7; permanent=0; _gitlab_session=226ad8a0be43681acf38c2fab9497240; __profilin=p%3Dt; request_method=GET Connection: keep-alive Content-Type: multipart/form-data; boundary=---------------------------9051914041544843365972754266 Content-Length: 554 -----------------------------9051914041544843365972754266 Content-Disposition: form-data; name="text" text default -----------------------------9051914041544843365972754266 Content-Disposition: form-data; name="file1"; filename="a.txt" Content-Type: text/plain Content of a.txt. -----------------------------9051914041544843365972754266 Content-Disposition: form-data; name="file2"; filename="a.html" Content-Type: text/html <!DOCTYPE html><title>Content of a.html.</title> -----------------------------9051914041544843365972754266--

Alternativamente, cURL debe enviar la misma solicitud de POST que su formulario de navegador:

nc -l localhost 8000 curl -F "text=default" -F "[email protected]" -F "[email protected]" localhost:8000

Puedes hacer múltiples pruebas con:

while true; do printf '''' | nc -l localhost 8000; done