from:http://blog.csdn.net/bfcady/article/details/2622701
思路:建立流對象,將上傳圖片臨時保存到byte數組中,再用SQL語句將其保存到數據庫中
說明:以下程序一切從簡,實際用應用中應注意使用try等語句
- 創建表ImageStore,表結構如下圖
- 主頁面HTML如下
- <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head runat="server">
- <title>圖片上傳</title>
- </head>
- <body>
- <form id="form1" runat="server">
- <div>
- <asp:FileUpload ID="fuImage" runat="server" />
- </div>
- <div>
- <asp:Button ID="btnUpload" runat="server" Text="上傳圖片" OnClick="btnUpload_Click" />
- </div>
- <div>
- 輸入圖片的ID:<asp:TextBox ID="txtImageID" runat="server"></asp:TextBox>
- </div>
- <div>
- <asp:Button ID="btnSubmit" runat="server" Text="顯示圖片"
- onclick="btnSubmit_Click" />
- </div>
- <div>
- <asp:Image ID="Image1" runat="server" />
- </div>
- </form>
- </body>
- </html>
- 主頁面后台代碼
- using System;
- using System.Configuration;
- using System.Data;
- using System.Web;
- using System.Web.Security;
- using System.Web.UI;
- using System.Web.UI.HtmlControls;
- using System.Web.UI.WebControls;
- using System.Web.UI.WebControls.WebParts;
- using System.IO;
- using System.Data.SqlClient;
- public partial class _Default : System.Web.UI.Page
- {
- protected void Page_Load(object sender, EventArgs e)
- {
- }
- protected void btnUpload_Click(object sender, EventArgs e)
- {
- int imageLength = fuImage.PostedFile.ContentLength;//取得圖片大小,以字節為單位
- byte[] imageByteArray = new byte[imageLength]; //圖片將臨時存儲在Byte(二進制)數組
- Stream imageStream = fuImage.PostedFile.InputStream;//建立流對象
- imageStream.Read(imageByteArray, 0, imageLength);//將圖片讀取到imageByteArray數組中,其中0為起始位置,imageLength為要讀取的長度
- //以下為數據庫連接
- SqlConnection sqlconn = new SqlConnection("server=(local);database=a0522183734;uid=a0522183734;pwd=bfcady");
- string sql = "insert imageStore(ImageData,ImageContentType,ImageDescription,ImageSize) values(@Image,@ContentType,@ImageDescription, @ImageSize)";
- SqlCommand sqlcom = new SqlCommand(sql, sqlconn);
- sqlcom.Parameters.AddWithValue("@Image", imageByteArray);
- sqlcom.Parameters.AddWithValue("@ContentType", Path.GetExtension(fuImage.PostedFile.FileName));//取得文件擴展名
- //取得文件名,不包含擴展名,實際應用中作為圖片描述用
- sqlcom.Parameters.AddWithValue("@ImageDescription", Path.GetFileNameWithoutExtension(fuImage.PostedFile.FileName));
- sqlcom.Parameters.AddWithValue("@ImageSize", imageLength);
- sqlconn.Open();
- sqlcom.ExecuteNonQuery();
- sqlconn.Close();
- }
- protected void btnSubmit_Click(object sender, EventArgs e)
- {
- //改變圖片的URL
- Image1.ImageUrl = "ReadImage.ashx?imgID=" + txtImageID.Text;
- }
- }
- 創建一般處理程序ReadImage.ashx,讀取圖片
-
- <%@ WebHandler Language="C#" Class="ReadImage" %>
- using System;
- using System.Web;
- using System.Data.SqlClient;
- public class ReadImage : IHttpHandler {
- public void ProcessRequest (HttpContext context) {
- string imgID = context.Request.QueryString["imgID"].ToString();
- SqlConnection sqlconn = new SqlConnection("server=(local);database=a0522183734;uid=a0522183734;pwd=bfcady");
- string sql = "select * from ImageStore where ImageID=" + imgID;
- SqlCommand sqlcom = new SqlCommand(sql, sqlconn);
- sqlconn.Open();
- SqlDataReader sqldr = sqlcom.ExecuteReader();
- if (sqldr.Read())//移到第一條記錄,如果第一條記錄不為空
- {
- context.Response.ContentType = (string)sqldr["ImageContentType"];//設置輸出類型
- context.Response.OutputStream.Write((byte[])sqldr["ImageData"], 0, (int)sqldr["ImageSize"]);
- context.Response.End();
- }
- sqlconn.Close();
- }
- public bool IsReusable {
- get {
- return false;
- }
- }
- }
- 運行結果如下