2011-01-14 26 views
1

我正在開發一個MVC應用程序,我需要在瀏覽器中顯示一個圖像,但是我沒有物理上的文件在磁盤上。如何在瀏覽器中僅顯示圖像的內容(字節[])

我的模型中只有一個byte[]數組,其中包含圖像的內容。是否有任何「簡單」的技巧在視圖中顯示圖像,而不將其寫入磁盤?

這使我的心是寫一個臨時文件,但第一種方式:

  1. 我應該選擇什麼樣的文件名?
  2. 我應該何時刪除它?恐怕我們會泄露這些文件。

所以我不想將內容寫入文件。還有其他方法嗎?

謝謝先進。


編輯:結果頁不僅是形象,我需要顯示一些文本,下面的圖像,例如:

<%= Response.Write("Some text here") %> 
    <%= /* Here my image */ %> 
+1

花花公子只是流呢:-),我正在尋找同樣的問題SO – 2011-01-14 11:33:52

+0

http://stackoverflow.com/questions/1769944/how-to-show-image-from-byte-array和http:// stackoverflow。com/questions/1738020/bytearray-to-image-asp-net/ – 2011-01-14 11:36:52

+0

@Jani:對不起,也許我忘了說我需要在結果頁面顯示更多內容(文本),請參閱我的編輯 – 2011-01-14 11:43:55

回答

4

我會創建一個控制器動作,一個字節數組。在您看來,您可以使用正常<img>標記,將src屬性設置爲呈現圖像的控制器操作。

這將是東西這樣的:

[HttpGet] 
public ActionResult Render(...) 
{ 
    byte[] imageBytes = ...; 

    MemoryStream imageStream = new MemoryStream(); 
    imageStream.Write(imageBytes, 0, imageBytes.Length); 

    return new FileStreamResult(imageStream, "image/png"); // might be a different mime type depending on your image type 
} 

從視圖那麼你可以做:

<p>Some text here</p> 
<img src="<%= Url.Action("Render", "MyController", new { params as needed }) %>" alt="Image" /> 
1

有幾個選項:

  • 編寫一個HTTP處理程序,它將返回字節數組並將圖像URL指向它
  • 編寫自定義圖像控制器和poi NT上的圖片URL,以它
  • 使用data URI scheme輸出的圖像數據直接
  • 如果你只是想形象,而不是服務了HTML,只需用正確的頭流出來
+0

感謝您的回覆,我需要在輸出頁面中混合文本和圖像,可能問題不明確。查看我的編輯。 – 2011-01-14 11:46:12

0

你可以有一個頁面,將像這樣的圖像:

var context = System.Web.HttpContext.Current; 
context.Response.Clear();  
context.Response.OutputStream.Write(buffer, 0, buffer.Length); 
context.Response.End(); 

你還應該設置context.Response.ContentType有意義的東西。如果你使用ImageEncoder來產生字節數組,你可以使用它的mimeType屬性,如果沒有 - 想辦法提供一個正確的內容類型(如"image/PNG"

相關問題