Domanda

Sto solo cercando di scrivere un parser multipart ma le cose sempre complicato e voglio chiedere se qualcuno sa di un parser pronto in C #!

Giusto per chiarire, sto scrivendo il mio "piccolo" http server e necessità di pars form-data multipart troppo!

Grazie in anticipo, Gohlool

È stato utile?

Soluzione

I open-source di C # Http formare parser qui .

Questo è un po 'più flessibile rispetto agli altri ha menzionato che è su CodePlex, dal momento che si può utilizzare sia per Multipart e non Multipart-form-data, e anche ti dà altri parametri di forma formattati in un oggetto Dictionary.

Questo può essere usato come segue:

non multipart

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"]);
    }
}

multipart

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);
    }
}

Altri suggerimenti

Ho avuto alcuni problemi con parser che si basano su analisi stringa in particolare con file di grandi dimensioni che ho trovato che sarebbe esaurito la memoria e non riescono a analizzare i dati binari.

Per far fronte a questi problemi che ho open source il mio tentativo di un parser C # multipart / form-data qui

Vedere la mia risposta qui per ulteriori informazioni.

Scopri il nuovo MultipartStreamProvider e le sue sottoclassi (vale a dire MultipartFormDataStreamProvider). È possibile creare la propria applicazione anche se nessuno del costruito in implementazioni sono adatti per utilizzi caso.

Con Nucleo ora si ha accesso ad un IFormCollection utilizzando HttpContext.Request.Form.

Salvataggio Esempio un'immagine:

        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);
        }

Ho avuto un problema simile che ho recentemente risolto grazie a Anthony sopra a http://antscode.blogspot.com/ per il parser multipart.

Caricamento file da Flex a questioni WCF REST stream (come decodificare multipart messaggio forma in REST WS)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top