[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 |
|---|