So extrahieren Sie Dateibytes aus einem Multipart-/Formulardaten-POST-Stream in WCF REST
Wenn Sie eine Datei in einen WCF REST POSTEN Wenn ein Dienst über eine Multipart-/Formulardatenanforderung ausgeführt wird, enthält der resultierende Stream eine Folge von Grenzen, Headern und Dateibytes. Das Extrahieren der Dateibytes aus diesem Stream kann eine Herausforderung sein.
Lösung: Verwendung der öffentlichen API von Microsoft
Microsoft stellt eine Reihe öffentlicher APIs bereit, die diesen Prozess vereinfachen:
Implementierung:
Dieser Codeausschnitt zeigt, wie man damit Dateibytes extrahiert APIs:
using System.Net.Http; using System.Net.Http.Formatting; using System.Threading.Tasks; public static async Task ParseFiles(Stream data, string contentType, Action<string, Stream> fileProcessor) { var streamContent = new StreamContent(data); streamContent.Headers.ContentType = MediaTypeHeaderValue.Parse(contentType); var provider = await streamContent.ReadAsMultipartAsync(); foreach (var httpContent in provider.Contents) { var fileName = httpContent.Headers.ContentDisposition.FileName; if (string.IsNullOrWhiteSpace(fileName)) continue; using (Stream fileContents = await httpContent.ReadAsStreamAsync()) { fileProcessor(fileName, fileContents); } } }
Beispielverwendung:
Wenn Sie eine WCF-REST-Methode haben, können Sie diese als solche implementieren:
[OperationContract] [WebInvoke(Method = WebRequestMethods.Http.Post, UriTemplate = "/Upload")] void Upload(Stream data) { MultipartParser.ParseFiles( data, WebOperationContext.Current.IncomingRequest.ContentType, MyProcessMethod); }
Dateiverarbeitung:
In der MyProcessMethod können Sie die auszuführenden Aktionen angeben mit den extrahierten Dateibytes, z. B. durch Schreiben auf die Festplatte.
Das obige ist der detaillierte Inhalt vonWie extrahiere ich Dateibytes aus einem Multipart/Form-Data-POST-Stream in WCF REST?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!