2016-09-07 91 views
0

我正在開發一個Web應用程序的服務器端組件,它應顯示存儲在數據庫中的圖像。以byte []形式提供文件作爲URL

我想找到一種方法來將字節數組或流轉換爲HTML img標記的有效URL。

byte []包含整個文件,包括標題。

我已經搜索了一個解決方案,但我仍然發現從URL保存到文件流的逆向問題。

有沒有辦法通過某種動態生成的url來提供文件,或者我是否需要創建要鏈接到的文件的物理副本?

回答

0

您可以將字節數組轉換爲Base64圖像。

public string getBase64Image(byte[] myImage) 
    { 
     if (myImage!= null) 
     { 
      return "data:image/jpeg;base64," + Convert.ToBase64String(myImage); 
     } 
     else 
     { 
      return string.Empty; 
     } 
    } 

您的圖像標記看起來像這樣:<img src="data:image/jpeg;base64,/9j/4AAQSkZJRgA...">

或爲大型圖像(和其他文件類型),最好使用Generic Handler

public void ProcessRequest(HttpContext context) 
    { 
     //check if the querystring 'id' exists 
     if (context.Request.QueryString["id"] != null) 
     { 
      string idnr = context.Request.QueryString["id"].ToString(); 

      //check if the id falls withing length parameters 
      if (idnr.Length > 0 && idnr.Length < 40) 
      { 
       //get the data from the db or other source 
       byte[] bin = getMyDataFromDB(); 

       //clear the headers 
       context.Response.ClearHeaders(); 
       context.Response.ClearContent(); 
       context.Response.Clear(); 
       context.Response.Buffer = true; 

       //if you do not want the images to be cached by the browser remove these 3 lines 
       context.Response.Cache.SetExpires(DateTime.Now.AddMonths(1)); 
       context.Response.Cache.SetCacheability(HttpCacheability.Public); 
       context.Response.Cache.SetValidUntilExpires(false); 

       //set the content type and headers 
       context.Response.ContentType = "image/jpeg"; 
       context.Response.AddHeader("Content-Disposition", "attachment; filename=\"myImage.jpg\""); 
       context.Response.AddHeader("content-Length", bin.Length.ToString()); 

       //write the byte array 
       context.Response.OutputStream.Write(bin, 0, bin.Length); 

       //cleanup 
       context.Response.Flush(); 
       context.Response.Close(); 
       context.Response.End(); 
      } 
     } 
    } 

您的圖像標記看起來像這樣:<img src="/Handler1.ashx?id=AB-1234">

+0

我不知道你實際上可以將圖像本身嵌入到src標記中! 我會馬上試試。 – rxj

+2

請注意,轉換爲Base64將創建一個大字符串。我通常不使用圖像大於50 kb的第一種方法。 – VDWWD

+0

@VDWWD不需要創建一個ashx處理程序:將圖像作爲byte [](第二種解決方案)提供的代碼將在「normal」getimage.aspx頁面的Page_Load()中工作 - 只需將'context.'替換爲'this。 '(或沒有) –

相關問題