1. 在ListView中放置顯示圖片及上傳圖片的控制項,圖片網址為一泛行處理常式
<asp:Image ID="picAlbum" runat="server" ImageUrl='<%# "ShowImage.ashx?id=" + Eval("id") %>' />
<asp:FileUpload ID="imgUpload" runat="server" />
2. 撰寫泛行處理常式顯示資料庫中的圖片欄位
public class ShowImage : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
int id;
if (context.Request.QueryString["id"] != null)
id = Convert.ToInt32(context.Request.QueryString["id"]);
else
throw new ArgumentException("No parameter specified");
context.Response.ContentType = "image/jpeg";
Stream strm = GetImage(id);
byte[] buffer = new byte[4096];
int byteSeq = strm.Read(buffer, 0, 4096);
while (byteSeq > 0)
{
context.Response.OutputStream.Write(buffer, 0, byteSeq);
byteSeq = strm.Read(buffer, 0, 4096);
}
//context.Response.BinaryWrite(buffer);
}
private Stream GetImage(int id)
{
using (SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "SELECT 照片 FROM 照片表格 WHERE ID = @ID";
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@ID", id);
object img = cmd.ExecuteScalar();
try
{
return new MemoryStream((byte[])img);
}
catch
{
return null;
}
}
}
}
public bool IsReusable
{
get
{
return false;
}
}
}
3. 於datasource的inserting、updating事件函數中取得使用者選擇的檔案作為參數值
private Byte[] getImage(FileUpload img)
{
Byte[] imgByte = null;
if (img.HasFile && img.PostedFile != null)
{
//To create a PostedFile
HttpPostedFile File = img.PostedFile;
//Create byte Array with file len
imgByte = new Byte[File.ContentLength];
//force the control to load data in array
File.InputStream.Read(imgByte, 0, File.ContentLength);
}
return imgByte;
}
4. 針對updating或inserting事件必須考慮使用者未選取任何檔案時會遇到資料型別不符問題,因為null會當作nvarchar型態造成語法錯誤問題,所以必須抽換參數改用SqlParameter並指定型別為Image,因為原本的參數型別不包含image
e.Command.Parameters.Remove(e.Command.Parameters["@照片"]);
e.Command.Parameters.Add(new SqlParameter("@照片", System.Data.SqlDbType.Image));
2011年1月20日 星期四
訂閱:
張貼留言 (Atom)
vue3-simple-alert 學習心得
官網 顯示提示輸入訊息並於按下確定時檢查是否有輸入,防止未輸入就按確定,且和按取消用不同邏輯處理 VueSimpleAlert.fire({ title: '請輸入原因', input: 'text', showCancel...
-
1. 設定檔案下載儲存位置為 C:\Users\%username%\AppData\Local\Google\Chrome\User Data\Default\Cache 2. 勾選"下載每個檔案前詢問儲存位置" 3. 針對不要下載的檔案類型於第一...
-
自動設定欄寬 sheet.Cells.AutoFitColumns(3, 20); // 必須設定 min 跟 max 才會正常作用 凍結欄位 sheet.View.FreezePanes(4, 4); 標題列 ws.PrinterSettings.RepeatRo...
-
使用 FreeSpire.XLS ... ep.Save(); using (var workbook = new Workbook()) using (var memStream = new MemoryStream()) { workbook.LoadFromSt...
沒有留言:
張貼留言