Lesen der Dateieingabe von einem mehrteiligen / Formulardaten-POST
Bin ich Entsendung eine Datei an einen WCF REST service durch ein HTML-Formular, mit enctype
eingestellt multipart/form-data
- und ein single-Komponente: <input type="file" name="data">
. Der resultierende Strom wird gelesen, indem der server enthält die folgenden:
------WebKitFormBoundary
Content-Disposition: form-data; name="data"; filename="DSCF0001.JPG"
Content-Type: image/jpeg
<file bytes>
------WebKitFormBoundary--
Das problem ist, dass ich bin nicht sicher, wie Sie Sie tun, extrahieren Sie die Datei-bytes aus dem stream. Ich muss dies tun, um zu schreiben die Datei auf die Festplatte.
Kommentar zu dem Problem - Öffnen
möglich, Duplikat der WCF-Dienst zu akzeptieren, einen Beitrag codiert multipart/form-data
@Darin: ich bin mir nicht sicher. Mein service bereits akzeptiert multipart/form-data von POSTs, aber das Lesen der eingehenden Strom und dem extrahieren der Datei in den bytes, was ich tun möchte.
Ich bin noch immer Thema in der Bild-upload mit einem Formular-Daten stackoverflow.com/questions/39853604/...
InformationsquelleAutor der Frage rafale | 2011-09-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie einen Blick auf die folgenden blog-post das zeigt eine Technik, die verwendet werden könnten, zu analysieren
multipart/form-data
auf dem server mit den Multipart-Parser:Andere Möglichkeit ist das aktivieren aspnet-Kompatibilität und verwenden
HttpContext.Current.Request
aber das ist nicht sehr WCFish Weg.InformationsquelleAutor der Antwort Darin Dimitrov
Sorry für den Beitritt in die Partei zu spät, aber es ist ein Weg, dies zu tun mit Microsoft public API.
Hier ist, was Sie brauchen:
System.Net.Http.dll
System.Net.Http.Formatting.dll
Hinweis Die Nuget-Pakete kommen mit mehr Baugruppen, aber zu der Zeit des Schreibens müssen Sie nur die oben genannten.
Sobald Sie die Assemblys verwiesen wird, kann der code wie folgt Aussehen (mit .NET 4.5 für die Bequemlichkeit):
Als für den Einsatz, sprich du hast die folgenden WCF-REST-Methode:
Du implementieren könntest es wie so
InformationsquelleAutor der Antwort Ohad Schneider
Ich hatte einige Probleme mit dem parser, basierend auf string-parsing-insbesondere bei großen Dateien, die ich gefunden, es wäre der Arbeitsspeicher und nicht zu Parsen von binären Daten.
Zur Bewältigung dieser Probleme habe ich open-Source-meinen eigenen Versuch an einem C# multipart/form-data parser hier
Features:
Einschränkungen:
Verwenden Sie einfach die MultipartFormDataParser Klasse etwa so:
Im Rahmen eines WCF-Diensts Sie können es verwenden, wie diese:
Oder so (etwas langsamer, aber mehr code, freundlich):
Dokumentation ist auch verfügbar, wenn Sie Klonen das repository navigieren Sie einfach zu
HttpMultipartParserDocumentation/Help/index.html
InformationsquelleAutor der Antwort Jake Woods
Ich open-Source-C# - Http-Formular-parser hier.
Dies ist etwas flexibler als die anderen genannten, die auf CodePlex, da Sie es verwenden können, für beide Multipart und nicht-Multipart
form-data
, und auch es gibt Ihnen eine andere form von Parametern formatiert in eineDictionary
Objekt.Diese können wie folgt verwendet werden:
nicht-multipart
multipart
InformationsquelleAutor der Antwort Lorenzo Polidori
Den Kerl, der dies Problem gelöst es gepostet LGPL und du bist nicht erlaubt, um es zu ändern. Ich wusste nicht einmal, klicken Sie auf es, wenn ich sah, dass.
Hier ist meine version. Dies muss getestet werden. Wahrscheinlich gibt es Fehler. Bitte senden Sie keine updates. Keine Garantie. Sie können ändern, das alles, was Sie wollen, nennen es Ihre eigenen, drucken Sie es aus auf ein Stück Papier und verwenden es für kennel Schrott, ... egal.
InformationsquelleAutor der Antwort
Habe ich umgesetzt MultipartReader NuGet-Paket für ASP.NET 4 für das Lesen von multipart form data. Es basiert auf Multipart-Form-Data Parser, aber es unterstützt mehr als eine Datei.
InformationsquelleAutor der Antwort Václav Dajbych
Mir behandelt WCF mit einer großen Datei (mehrere GB) hochladen, wo die Daten im Speicher ist keine option. Meine Lösung ist zum speichern von message stream zu einer temp-Datei und verwenden Sie suchen, um herauszufinden, Beginn und Ende der binären Daten.
InformationsquelleAutor der Antwort Yang Zhang
Wie wäre es mit einer Regex?
Ich schrieb dies für einen text, eine Datei, aber ich glaube, das könnte für Sie arbeiten
(Wenn die text-Datei enthält eine Zeile, beginnend genau mit dem "abgestimmt" unten - einfach passen Sie Ihre Regex)
InformationsquelleAutor der Antwort mork
Andere Möglichkeit wäre die Nutzung .Net-parser für HttpRequest. Das zu tun, müssen Sie ein bisschen nachdenken und einfach Klasse für WorkerRequest.
Erste Klasse erstellen, die sich von HttpWorkerRequest (für die Einfachheit, die Sie verwenden können SimpleWorkerRequest):
Dann überall dort, wo Sie Sie Nachricht, die Strom erzeugen und die Instanz dieser Klasse. Ich mache es wie in der WCF-Service:
Erstellen und dann HttpRequest mit Aktivator-und nicht-öffentlichen Konstruktor
Danach in
r.Files
haben Sie Dateien von Ihrem stream.InformationsquelleAutor der Antwort Lukasz Salamon