Extraction d'octets de fichier à partir d'un POST multipart/form-data
Dans un POST multipart/form-data, les données du fichier sont intégrées dans le flux de requêtes. Cela présente un défi pour l'extraction des octets du fichier côté serveur. Une solution consiste à utiliser les API publiques de Microsoft pour analyser le contenu en plusieurs parties.
Mise en œuvre
Pour analyser les données en plusieurs parties à l'aide de l'API de Microsoft, vous aurez besoin du System.Net.Http .dll et System.Net.Http.Formatting.dll. Pour .NET 4.5, ces assemblys sont inclus. Pour .NET 4, téléchargez-les via NuGet.
Avec les assemblys référencés, vous pouvez implémenter la logique d'analyse :
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); } } }
Pour utiliser ce code, vous pouvez implémenter une méthode WCF REST comme ce qui suit :
[OperationContract] [WebInvoke(Method = WebRequestMethods.Http.Post, UriTemplate = "/Upload")] void Upload(Stream data) { MultipartParser.ParseFiles( data, WebOperationContext.Current.IncomingRequest.ContentType, MyProcessMethod); }
En utilisant les API de Microsoft, vous pouvez extraire efficacement les octets du fichier de multipart/form-data Requêtes POST, vous permettant d'écrire les fichiers sur le disque.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!