0
我正在開發一個Web應用程序的服務器端組件,它應顯示存儲在數據庫中的圖像。以byte []形式提供文件作爲URL
我想找到一種方法來將字節數組或流轉換爲HTML img標記的有效URL。
byte []包含整個文件,包括標題。
我已經搜索了一個解決方案,但我仍然發現從URL保存到文件流的逆向問題。
有沒有辦法通過某種動態生成的url來提供文件,或者我是否需要創建要鏈接到的文件的物理副本?
我正在開發一個Web應用程序的服務器端組件,它應顯示存儲在數據庫中的圖像。以byte []形式提供文件作爲URL
我想找到一種方法來將字節數組或流轉換爲HTML img標記的有效URL。
byte []包含整個文件,包括標題。
我已經搜索了一個解決方案,但我仍然發現從URL保存到文件流的逆向問題。
有沒有辦法通過某種動態生成的url來提供文件,或者我是否需要創建要鏈接到的文件的物理副本?
您可以將字節數組轉換爲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">
我不知道你實際上可以將圖像本身嵌入到src標記中! 我會馬上試試。 – rxj
請注意,轉換爲Base64將創建一個大字符串。我通常不使用圖像大於50 kb的第一種方法。 – VDWWD
@VDWWD不需要創建一個ashx處理程序:將圖像作爲byte [](第二種解決方案)提供的代碼將在「normal」getimage.aspx頁面的Page_Load()中工作 - 只需將'context.'替換爲'this。 '(或沒有) –