2010-10-07 36 views
7

Estoy tratando de escribir un analizador multiparte pero las cosas se complican y quiero preguntar si alguien sabe de un analizador listo en C#!¿Hay algún analizador multipart/form-data en C# - (NO ASP)

¡Para dejar en claro, estoy escribiendo mi propio servidor http "pequeño" y necesito también pars multipart formularios de datos!

Gracias de antemano, Gohlool

+0

¿Qué desea analizar? – Nayan

+0

Bueno, estoy analizando un flujo de varias partes/datos de formulario recibidos del navegador cargando un archivo y algunos campos. – Gohlool

+0

Sí, está: http://stackoverflow.com/questions/7460088/reading-file-input-from-a-multipart-form-data-post/21689347#21689347 (aunque tiene ASP.NET en el nombre puede usarlo en cualquier lugar, específicamente no necesita ejecutarse bajo ASP.NET) –

Respuesta

23

I de código abierto una C# forma Http analizador here.

Esto es ligeramente más flexible que el otro mencionado, que está en CodePlex, ya que se puede utilizar tanto para multiparte y no Multipart form-data, y también le da otros parámetros de forma formateados en un objeto Dictionary.

Esto se puede utilizar de la siguiente manera:

no multiparte

public void Login(Stream stream) 
{ 
    string username = null; 
    string password = null; 

    HttpContentParser parser = new HttpContentParser(stream); 
    if (parser.Success) 
    { 
     username = HttpUtility.UrlDecode(parser.Parameters["username"]); 
     password = HttpUtility.UrlDecode(parser.Parameters["password"]); 
    } 
} 

multiparte

public void Upload(Stream stream) 
{ 
    HttpMultipartParser parser = new HttpMultipartParser(stream, "image"); 

    if (parser.Success) 
    { 
     string user = HttpUtility.UrlDecode(parser.Parameters["user"]); 
     string title = HttpUtility.UrlDecode(parser.Parameters["title"]); 

     // Save the file somewhere 
     File.WriteAllBytes(FILE_PATH + title + FILE_EXT, parser.FileContents); 
    } 
} 
+0

¡Muchas gracias por su respuesta! Trataré de verificarlo y espero que sea compatible con el formato multipar/mixto también. – Gohlool

+1

@Gohlool sí, el HttpMultipartParser admite datos de formulario multiparte formados por un número arbitrario de partes de texto y una parte de archivo. El nombre de la parte que contiene el archivo debe pasar como segundo argumento en el constructor y el archivo puede ser cualquier tipo de mime. –

+0

¡Muchas gracias, Lorenzo! – Gohlool

6

que he tenido algunos problemas con el programa de análisis que se basan en cadena Analizando especialmente con archivos de gran tamaño, encontré que se quedaría sin memoria y no se puede analizar el dat binario a.

Para hacer frente a estos problemas que he código abierto mi propio intento de un analizador de C# multipart/form-data here

Véase mi respuesta here para más información.

1

Eche un vistazo al nuevo MultipartStreamProvider y sus subclases (es decir, MultipartFormDataStreamProvider). También puede crear su propia implementación si ninguna de las implementaciones integradas es adecuada para su caso de uso.

0

Con Core ahora tiene acceso a una IFormCollection utilizando HttpContext.Request.Form.

Ejemplo guardar una imagen:

 Microsoft.AspNetCore.Http.IFormCollection form; 
     form = ControllerContext.HttpContext.Request.Form; 

     using (var fileStream = System.IO.File.Create(strFile)) 
     { 
      form.Files[0].OpenReadStream().Seek(0, System.IO.SeekOrigin.Begin); 
      form.Files[0].OpenReadStream().CopyTo(fileStream); 
     } 
Cuestiones relacionadas