Comment extraire des octets de fichier d'un flux POST multiparties/données de formulaire dans WCF REST
Lorsque vous POSTez un fichier sur un WCF REST service via une requête multipart/form-data, le flux résultant contient une séquence de limites, d'en-têtes et d'octets de fichier. Extraire les octets du fichier de ce flux peut être difficile.
Solution : Utilisation de l'API publique Microsoft
Microsoft fournit un ensemble d'API publiques qui simplifient ce processus :
Implémentation :
Cet extrait de code montre comment extraire les octets d'un fichier à l'aide de ceux-ci API :
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); } } }
Exemple d'utilisation :
Si vous disposez d'une méthode WCF REST, vous pouvez l'implémenter en tant que telle :
[OperationContract] [WebInvoke(Method = WebRequestMethods.Http.Post, UriTemplate = "/Upload")] void Upload(Stream data) { MultipartParser.ParseFiles( data, WebOperationContext.Current.IncomingRequest.ContentType, MyProcessMethod); }
Traitement des fichiers :
Dans MyProcessMethod, vous pouvez spécifier les actions à effectuer avec les octets du fichier extrait, par exemple en les écrivant 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!