|
웹하드 만들기 (다운로드,이미지리스트) |
작성자 |
송준영 |
작성일 |
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을 마찬가지로 설정해준다.
|