|
|
|
웹하드 만들기 (다운로드,이미지리스트) |
작성자 |
송준영 |
|
작성일 |
2011.11.14 |
다운로드하기
|
<asp:Content ID="Content2" ContentPlaceHolderID="cphFileList" runat="Server"> <asp:DataGrid runat="server" ID="dgrid" AutoGenerateColumns="false"> <Columns> <asp:HyperLinkColumn DataTextField="fName" HeaderText="파일이름" DataNavigateUrlField="fName" DataNavigateUrlFormatString="FileDownloadPage.aspx?fName={0}"></asp:HyperLinkColumn> <asp:BoundColumn DataField="fSize" HeaderText="파일크기"></asp:BoundColumn> </Columns> </asp:DataGrid> <asp:Label ID="lblText" runat="server"></asp:Label> </asp:Content>
|
파일 목록에서 하이퍼 링크로 지정된 파일이름을 클릭할 때 FileDownLoadPage.apsx로 링크를 걸어 다운로드대화상자를 띄워준다.
|
protected void Page_Load(object sender, EventArgs e) { string fName = Request["fName"].ToString();
string id = Session["id"].ToString(); Response.Clear(); Response.AddHeader("Content-Disposition", "attachment;filename=" + Server.UrlEncode(fName).Replace("+", "%20")); Response.ContentType = this.MineTypeByFileExtension(fName); string path = string.Format(@"C:\Users\Eod\Desktop\WebHDD\{0}\{1}", id, fName); Response.TransmitFile(path); Response.End();
} |
AddHeader와 ContentType에 주목하자. AddHeader는 해더에 정보를 추가하고, ContentType은 파일의 MIME타입을 설정해주면 되는데 MIME 타입은 PostFile.ContentType메소드로 알수있다.
|
|
이미지로 파일리스트 띄우기
|
|
그림 파일의 경우에는 파일이름리스트보다 실제 해당 파일의 이미지를 목록으로 보여주어야 한다.
|
private void BindingFIleList() { string id = Session["id"].ToString(); string connString = @"Data Source=EOD-PC;Initial Catalog=WebHDDMember;User ID=sa;Password=1";
string query = "select fName from " + id + "Member where fExt='bmp' or fExt='gif' or fExt='jpg'";
SqlConnection sConn = new SqlConnection(connString); SqlCommand sComm = new SqlCommand(query, sConn); sConn.Open();
SqlDataReader sReader = sComm.ExecuteReader(CommandBehavior.CloseConnection); while (sReader.Read()) { ImageButton lbtn = new ImageButton(); lbtn.ImageUrl =Session["path"].ToString()+Session["id"].ToString()+@"\"+ sReader[0].ToString(); lbtn.Width = 50; lbtn.Height = 50; Session["fName"] = sReader[0].ToString(); lbtn.Click += new System.Web.UI.ImageClickEventHandler(lbtn_Click); System.Web.UI.HtmlControls.HtmlForm f = (HtmlForm)Master.FindControl("formMaster"); f.Controls.Add(lbtn); } sReader.Close(); } |
SqlDataReader를 통해 읽어온 파일의 이름과 세션에 들어있는 경로, 아이디를 더해 ImageUri에 입력해준다. 이미지 버튼클릭 이벤트를 만들어주어서 이미지를 클릭했을 때 다운로드 할수 있게 한다.
|
System.Web.UI.HtmlControls.HtmlForm f = (HtmlForm)Master.FindControl("formMaster");
|
이 부분은 콘텐츠페이지에서 마스터페이지에 있는 컨트롤을 컨트롤 하기 위해서 구현하였다. 이미지를 생성하게 되는데 이미지는 도구이기 때문에 폼에 Add시켜주어야 하기떄문에 콘텐츠페이지에서 생성하지만 마스터 페이지에있는 폼에 Add하려고 구현한것이다.
이미지 클릭시에 다운로드 하기
|
void lbtn_Click(object sender, System.Web.UI.ImageClickEventArgs e) { string fName = Session["fName"].ToString();
string id = Session["id"].ToString(); Response.Clear(); Response.AddHeader("Content-Disposition", "attachment;filename=" +fName); Response.ContentType = this.MineTypeByFileExtension(fName); string path = string.Format(@"C:\Users\Eod\Desktop\WebHDD\{0}\{1}", id, fName); Response.TransmitFile(path); Response.End();
} |
|
private string MineTypeByFileExtension(string fName) { string ext = string.Empty;
string contentType = "application/unkown";
if (fName.IndexOf(".") != -1) { ext = fName.Substring(fName.LastIndexOf(".") + 1); } switch (ext.ToLower()) { case "jpg": contentType = "image/bmp"; break; case "gif": contentType = "image/gif"; break; case "pdf": contentType = "application/pdf"; break; case "txt": contentType = "text/plain"; break; case "xlsx": contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; break; case "pptx": contentType = "application/vnd.openxmlformats-officedocument.presentationml.presentation"; break; case "docx": contentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"; break; }
return contentType; } |
다운로드 할 때 AddHeader와 ContentType을 마찬가지로 설정해준다.
|
|