並在編輯樣板內放入一個HyperLink並替它做DataBinding
protected void HyperLink1_DataBinding(object sender, EventArgs e)
HyperLink link = (HyperLink)sender;//取得當前觸發這個事件的Hyperlink做連繫
link.Text = Eval("FileName").ToString();
link.NavigateUrl = "filedownload.ashx?id=" + Eval("ID");//傳遞ID給ashx處理
再來就是加入重頭戲的filedownload.ashx
可以發現它空空如也,沒有設計畫面只有ProcessRequest這個主要運行的功能
接著寫上處理檔案下載的功能:
首先是前置作業取得真正的檔案位置與要使用的檔案名稱
string fileName;
string filaPath;
using (SqlConnection nowConnection = new SqlConnection(strConnection))//使用連接字串初始SqlConnection物件連接資料庫
nowConnection.Open();//開啟連線
using (SqlCommand command = new SqlCommand())
command.Parameters.Clear();//清空參數
command.Parameters.Add("@id", SqlDbType.Int).Value = id;
command.CommandText = @"select * from Attachment where AttachmentID = @id";
command.Connection = nowConnection;//資料庫連接
SqlDataReader dr = command.ExecuteReader();
dr.Read();
fileName = dr["AttachmentName"].ToString();
filaPath = dr["AttachmentPath"].ToString();
if(!Download(filaPath, fileName))
context.Response.Expires = 0;
context.Response.Clear();
context.Response.ContentType = "text/html";
context.Response.Write("無檔案");
context.Response.End();
在進行檔案寫入與回傳(示範WriteFile,但寫法不只一種,還有**BinaryWrite、TransmitFile**)
public bool Download(string filePath, string fileName)
//xFile 路徑+檔案, 設定另存的檔名
if (File.Exists(filePath))//檢查檔案是否存在
FileInfo xpath_file = new FileInfo(filePath); //要 using System.IO;
// 將傳入的檔名以 FileInfo 來進行解析(只以字串無法做)
System.Web.HttpContext.Current.Response.Clear(); //清除buffer
System.Web.HttpContext.Current.Response.ClearHeaders(); //清除 buffer 表頭
System.Web.HttpContext.Current.Response.Buffer = false;
System.Web.HttpContext.Current.Response.ContentType = "application/octet-stream";
// 檔案類型還有下列幾種"application/pdf"、"application/vnd.ms-excel"
//、"text/xml"、"text/HTML"、"image/JPEG"、"image/GIF"
System.Web.HttpContext.Current.Response.AppendHeader("Content-Disposition",
"attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
// 考慮 utf-8 檔名問題,以 out_file 設定另存的檔名
System.Web.HttpContext.Current.Response.AppendHeader("Content-Length", xpath_file.Length.ToString()); //表頭加入檔案大小
System.Web.HttpContext.Current.Response.WriteFile(xpath_file.FullName);
// 將檔案輸出
System.Web.HttpContext.Current.Response.Flush();
// 強制 Flush buffer 內容
System.Web.HttpContext.Current.Response.End();
return true;
catch (Exception)
{ return false; }
return false;
這樣就可以完成下載囉!!!!!
[.ashx檔?泛型處理常式?]基礎入門#5....ADO.NET 與 將DB裡面的二進位圖片還原 (範例下載 & 大型控制項的ImageField)
應該是 http://www.dotblogs.com.tw/mis2000lab/archive/2014/05/19/ashx\_beginner\_05\_db\_picture\_show\_download.aspx