2016-11-24 112 views
11

使用asp.net核心Web API,我想有我控制器操作方法返回一個JPEG圖像流
在我目前的實現中,瀏覽器只顯示一個json字符串。 我的期望是在瀏覽器中看到圖像。返回JPEG圖像的WebAPI

在使用Chrome開發者工具調試我發現,內容類型仍然是

Content-Type:application/json; charset=utf-8

在響應頭回來,即使我的代碼手動設置內容類型爲「image/JPEG」 。

尋找一個解決方案我的Web API是如下

[HttpGet] 
    public async Task<HttpResponseMessage> Get() 
    { 
     var image = System.IO.File.OpenRead("C:\\test\random_image.jpeg"); 
     var stream = new MemoryStream(); 

     image.CopyTo(stream); 
     stream.Position = 0;    
     result.Content = new StreamContent(image); 
     result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment"); 
     result.Content.Headers.ContentDisposition.FileName = "random_image.jpeg"; 
     result.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg"); 
     result.Content.Headers.ContentLength = stream.Length; 

     return result; 
    } 

enter image description here

回答

15

清潔液使用FilestreamResult!

[HttpGet] 
    public async Task<IActionResult> Get() 
    { 
     var image = System.IO.File.OpenRead("C:\\test\random_image.jpeg"); 
     return File(image, "image/jpeg"); 
    } 

解釋:
在Asp.Net核心,你必須使用內置文件()方法的控制器內。這將允許您手動設置內容類型。 不要創建並返回HttpResponseMessage,就像你習慣使用Asp.net web api 2一樣。它什麼也不做,甚至不會拋出錯誤!

0
[HttpGet("Image/{id}")] 
    public IActionResult Image(int id) 
    { 
     if(id == null){ return NotFound(); } 
     else{ 

      byte[] imagen = "@C:\\test\random_image.jpeg"; 
      return File(imagen, "image/jpeg"); 
     } 
    } 
+1

這不能工作。 – Ben