[WebForm] 파일 다운로드 구현 (파일명 깨짐 해결)
2018. 11. 9. 15:18ㆍWEB/ASP.NET WebForm
ASP.NET WebForm에서 특정 이벤트 발생 시 파일다운로드는 아래와 같이 구현할 수 있습니다.
protected void lbtDownloadPdf_Click(object sernder, EventArgs e) { //PDF다운로드 예제 byte[] pdfByte = File.ReadAllBytes(Server.MapPath("~/Content/sample.pdf")); //1. IE, Edge 브라우저에서 파일명 깨짐 방지 string fileName = "샘플PDF파일"; string browser = Request.Browser.Type.ToUpper(); string userAgent = Request.UserAgent.ToUpper(); bool isIE = browser.StartsWith("IE") || browser.Contains("INTERNETEXPLORER") || userAgent.Contains("TRIDENT") || userAgent.Contains("MSIE"); bool isEdge = userAgent.Contains("EDGE"); if (isIE || isEdge) fileName = HttpUtility.UrlEncode(fileName, UTF8Encoding.UTF8).Replace("+", " "); //2. 파일 출력 Response.Clear(); Response.Buffer = true; Response.ContentType = "application/octet-stream"; Response.AddHeader("content-disposition", "attachment;filename=" + fileName + ".pdf"); Response.AddHeader("Content-Transfer-Encoding", "Binary"); Response.BinaryWrite(pdfByte); Response.Flush(); Response.SuppressContent = true; ApplicationInstance.CompleteRequest(); }
- IE, Edge에서는 파일명이 깨질 수 있으므로 URL Encoding 처리를 해주어야 합니다.
- ContentType은 octet-stream으로 설정하여 브라우저가 파일을 다운로드 받게 합니다.
- Content-Disposition을 통해 파일명을 설정할 수 있습니다.
- Reseponse.End()는 Exception이 발생하므로 Response.SuppressContent = true; ApplicationInstance.CompleteRequest();를 대신 사용하였습니다.
'WEB > ASP.NET WebForm' 카테고리의 다른 글
[ASP.NET] 파일순환참조는 허용되지 않습니다. (0) | 2015.03.13 |
---|