在 ASP.NET Web API 中以位元組數組形式傳回檔案
本文示範如何在 ASP.NET Web API 中有效地將檔案作為位元組陣列傳回。 MVC 中常用的 FileContentResult
在這裡不直接適用。
挑戰:
使用為 MVC 設計的方法直接從 ApiController
傳回 PDF 檔案(或其他檔案類型)通常會產生意想不到的結果。
解:
關鍵是將檔案當作位元組陣列處理。 這涉及幾個步驟:
流到位元組數組轉換:將檔案讀入流,然後將該流轉換為位元組數組。
ByteArrayContent 建立: 利用 ByteArrayContent
類,傳遞上一步驟所獲得的位元組數組。
標頭管理: 正確設定Content-Disposition
標頭以指定下載的檔案名,並設定Content-Type
標頭以正確識別檔案類型(例如,PDF 的「application/pdf」) 。
HttpResponseMessage 建構: 將 ByteArrayContent
封裝在 HttpResponseMessage
物件中,設定適當的 HTTP 狀態碼(例如 HttpStatusCode.OK
)。
程式碼範例:
<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>
這個修改後的範例展示如何以位元組數組的形式傳回 PDF 檔案(或任何檔案類型),並附帶必要的標頭。 客戶端(瀏覽器)現在應該正確處理文件下載。 請記得將佔位符註解 // ... Your file stream processing here ...
替換為您實際的檔案讀取邏輯。 考慮使用更具體的 Content-Type
標頭以獲得更好的瀏覽器相容性。
以上是如何在 ASP.NET Web API 中以 ByteContent 形式傳回檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!