Tengo un HttpListenerRequest que se inició desde un html <form>
que se publicó. Necesito saber cómo obtener los valores del formulario publicados + los archivos cargados. ¿Alguien sabe de un ejemplo para ahorrarme tiempo haciéndolo por mí mismo? He tenido un google alrededor pero no encontré nada de uso.Obteniendo datos de formulario de HttpListenerRequest
Respuesta
Lo más importante de entender es que HttpListener es una herramienta de bajo nivel para trabajar con solicitudes http. Todos los datos de la publicación están en la secuencia HttpListenerRequest.InputStream. Supongamos que tenemos un formulario como ese:
<form method=\"post\" enctype=\"multipart/form-data\"><input id=\"fileUp\" name=\"fileUpload\" type=\"file\" /><input type=\"submit\" /></form>
Ahora queremos ver los datos de la publicación. Vamos a implementar un método para hacer esto:
public static string GetRequestPostData(HttpListenerRequest request)
{
if (!request.HasEntityBody)
{
return null;
}
using (System.IO.Stream body = request.InputStream) // here we have data
{
using (System.IO.StreamReader reader = new System.IO.StreamReader(body, request.ContentEncoding))
{
return reader.ReadToEnd();
}
}
}
subir algunos archivos y ver resultado:
Content-Disposition: form-data; name="somename"; filename="D:\Test.bmp"
Content-Type: image/bmp
...here is the raw file data...
Siguiente supongamos que tenemos forma sencilla y sin la carga de archivos:
<form method=\"post\">First name: <input type=\"text\" name=\"firstname\" /><br />Last name: <input type=\"text\" name=\"lastname\" /><input type=\"submit\" value=\"Submit\" /></form>
Veamos la salida :
firstname=MyName&lastname=MyLastName
Combinado resultado formulario:
Content-Disposition: form-data; name="firstname"
My Name
Content-Disposition: form-data; name="somename"; filename="D:\test.xls"
Content-Type: application/octet-stream
...raw file data...
Como se puede ver en el caso de forma sencilla se puede simplemente leer InputStream a cuerda y analizar los valores de correos. Si hay una forma más compleja, necesita realizar un análisis más complejo, pero aún se puede hacer. Espero que estos ejemplos le ahorren tiempo. Tenga en cuenta que ese no es siempre el caso de leer todo el flujo como una cadena.
- 1. jquery obteniendo datos del formulario
- 2. Obteniendo datos de Alexa
- 3. JavaScript - Obteniendo valores de formulario HTML
- 4. Obteniendo densidad de probabilidad de datos
- 5. cURL Datos binarios y datos de formulario
- 6. jQuery datos de formulario POST
- 7. Obteniendo datos almacenados de la base de datos en ListView.
- 8. correctamente obteniendo datos de un (ordenados) JTable
- 9. Obteniendo datos de ctypes array en numpy
- 10. Windows Forms, obteniendo una propiedad del formulario principal
- 11. Obteniendo datos binarios usando SqlDataReader
- 12. Lectura de datos de formulario en ActionFilterAttribute
- 13. Django Datos de recarga de formulario
- 14. Obteniendo datos de la base de datos MySQL a la lista desplegable html
- 15. Obteniendo datos de la fila seleccionada de la cuadrícula de datos y ¿qué evento?
- 16. Rellenar datos de campo de formulario Django con datos Db
- 17. Obteniendo un formulario para usar: method =>: delete (rails)
- 18. obteniendo todas las casillas marcadas en un formulario
- 19. PHP - analizar datos de formulario multiparte
- 20. obtener datos de solicitud en Django formulario
- 21. codeigniter: Obteniendo datos publicados entre dos fechas
- 22. Enviando datos POST sin formulario
- 23. ¿MySQL no está obteniendo datos correctos? (PHP)
- 24. Obteniendo datos incorrectos al usar SimpleDateFormat.parse()
- 25. Pasar datos al primer formulario del segundo formulario en C#
- 26. Solicitud de PUT de datos de formulario multiparte de PHP?
- 27. Obteniendo datos entre dos cadenas de fechas en MySQL
- 28. obteniendo datos de una relación muchos a muchos db
- 29. Obteniendo desplazamiento de los datos del acelerómetro con Core Motion
- 30. Obteniendo datos dentro de una clase ASP.NET MVC ViewModel?
Gracias. Ya sabía eso, solo esperaba que alguien supiera de un ejemplo para ahorrarme tiempo de escribir uno. ¡Alguien debe haber hecho esto antes! –
Esto es ciertamente una respuesta útil, pero estoy descubriendo que con grandes transferencias de archivos obtengo una OutOfMemoryException con mi llamada a reader.ReadToEnd(). ¿Hay una manera simple de transmitir el archivo en incrementos o resolver este problema? – vargonian
[Ejemplo de código de análisis de formulario] (http://blog.mikehacker.net/2006/11/13/httplistener-and-forms/). En respuesta a la 'OutOfMemoryException', los datos de su Formulario no deberían ser tan grandes que exploten la memoria. Debe verificar el tipo de contenido antes de intentar analizar los datos de la secuencia en un formulario. –