Ci sono dei parser multipart / form-data in C # - (NO ASP)
-
28-09-2019 - |
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
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.