Renvoi de fichiers sous forme de tableaux d'octets dans l'API Web ASP.NET
Cet article montre comment renvoyer efficacement des fichiers sous forme de tableaux d'octets dans une API Web ASP.NET. Le FileContentResult
, couramment utilisé dans MVC, n'est pas directement applicable ici.
Défi :
Le renvoi direct de fichiers PDF (ou d'autres types de fichiers) à partir d'un ApiController
à l'aide de méthodes conçues pour MVC donne souvent des résultats inattendus.
Solution :
La clé est de gérer le fichier comme un tableau d'octets. Cela implique plusieurs étapes :
Conversion de flux en tableau d'octets : Lisez le fichier dans un flux, puis convertissez ce flux en tableau d'octets.
Création de ByteArrayContent : Utilisez la classe ByteArrayContent
en transmettant le tableau d'octets obtenu à l'étape précédente.
Gestion des en-têtes : Définissez correctement l'en-tête Content-Disposition
pour spécifier le nom du fichier à télécharger et l'en-tête Content-Type
pour identifier correctement le type de fichier (par exemple, "application/pdf" pour les PDF).
Construction HttpResponseMessage : Packagez le ByteArrayContent
dans un objet HttpResponseMessage
, en définissant le code d'état HTTP approprié (par exemple, HttpStatusCode.OK
).
Exemple de code :
<code class="language-csharp">[HttpGet] public HttpResponseMessage Generate() { using (var stream = new MemoryStream()) { // ... Your file stream processing here ... Populate the 'stream' var byteArray = stream.ToArray(); var result = new HttpResponseMessage(HttpStatusCode.OK) { Content = new ByteArrayContent(byteArray) }; result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = "CertificationCard.pdf" }; result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); // Or application/pdf return result; } }</code>
Cet exemple révisé montre comment renvoyer un fichier PDF (ou tout autre type de fichier) sous forme de tableau d'octets, avec les en-têtes nécessaires. Le client (navigateur) devrait désormais gérer correctement le téléchargement du fichier. N'oubliez pas de remplacer le commentaire d'espace réservé // ... Your file stream processing here ...
par votre logique de lecture de fichier réelle. Pensez à utiliser des en-têtes Content-Type
plus spécifiques pour une meilleure compatibilité avec les navigateurs.
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!