程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> ASP.NET基礎 >> Image顯示服務器上任意絕對路徑下的圖片(采用二進制流實現)

Image顯示服務器上任意絕對路徑下的圖片(采用二進制流實現)

編輯:ASP.NET基礎
我要實現這樣一個需求:數據庫中存儲的是照片所在的絕對路徑(可以不在系統所在路徑下),Image控件動態加載路徑下的圖片。

看到這個題目,有些人會說,這還不簡單啊,將URL直接設置成絕對路徑不就行了啊。我只能說,如果你這樣說,那麼只能說明你沒有經過思考,甚至於,還沒有搞清楚Web開發中前台代碼和後台代碼到底是什麼意思,但是這種做法,在自己做的時候(未架到IIS),搜狗浏覽器是可以顯示圖片的(僅此一款可以顯示,所以這種做法沒有意義)。

Image控件是在System.Web.UI.WebControls命名控件中,所以不能像在winform中那樣通過byte[]直接顯示圖片(個人也有點不太明白這句話,誰如果明白可以解釋一下)。找到的這種方法,是采取將圖片讀取,然後將讀進來的二進制流寫到一個頁面上,然後將Image的URL設置為此頁面。下面是我的Demo實現代碼。
前台代碼:
復制代碼 代碼如下:
<head runat="server">
<title></title>
<script src="jquery-1.7.1.js" type="text/javascript"></script>
<script type="text/javascript">
function ShowP(obj) {
$("#Image1")[0].src = "ShowPic.aspx?URL=" + obj.id;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<input id="E:\\1.jpg" type="button" value="button" onclick="ShowP(this);" />
<asp:Image ID="Image1" runat="server" />
</div>
</form>
</body>
</html>

ShowPic.aspx的前台代碼為空,下面是ShowPic.aspx的後台代碼:
復制代碼 代碼如下:
public partial class ShowPic : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
#region "根據照片路徑,將照片轉為二進制數組"
string strUrl = Request.QueryString["URL"];
// 以二進制方式讀文件
FileStream aFile = new FileStream(strUrl, FileMode.OpenOrCreate, FileAccess.ReadWrite);
// 創建一個二進制數據流讀入器,和打開的文件關聯
BinaryReader brMyfile = new BinaryReader(aFile);
// 把文件指針重新定位到文件的開始
brMyfile.BaseStream.Seek(0, SeekOrigin.Begin);
//獲取照片的字節數組
byte[] photo = brMyfile.ReadBytes(Convert.ToInt32(aFile.Length.ToString()));
// 關閉以上new的各個對象
brMyfile.Close();
#endregion
Response.BinaryWrite(photo);
}
}

在上面我把照片的路徑賦給了按鈕ID,然後將路徑作為參數來調用ShowPic.aspx,在ShowPic的後台代碼中,將照片以二維數組的形式寫到頁面上,如果你直接打開這個頁面,會顯示亂碼。

然後將Image的Url設置為這個頁面,此時會顯示圖片。我通過按鈕ID實現了一下動態加載圖片,到具體應用,還有一點點傳參的小問題,關於JavaScript傳參,這個還是需要大家自己做個例子,通過javascript調試工具,來了解dom結構,然後進行操作。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved