ASP.NET 서버 에서 파일 다운로드 문제 처리
public void DownloadFile(string path, string name){
try{
System.IO.FileInfo file = new System.IO.FileInfo(path);
Response.Clear();
Response.Charset = "GB2312";
Response.ContentEncoding = System.Text.Encoding.UTF8;
// , " / "
Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(name));
// , ,
Response.AddHeader("Content-Length", file.Length.ToString());
// ,
Response.ContentType = "application/ms-excel";
//
Response.WriteFile(file.FullName);
//
//Response.End();
HttpContext.Current.ApplicationInstance.CompleteRequest();
}
catch (Exception ex){
Response.Write("<script>alert(' ://n" + ex.Message + "!//n .')</script>");
}
}
이 함 수 는 다운로드 기능 을 가 진 그룹 프로그램 입 니 다.path 는 파일 의 절대 경로(파일 이름 포함)이 고 name 은 파일 이름 입 니 다.이 프로그램 은 실행 할 수 있 습 니 다.그 중에서 HttpContext.Current.ApplicationInstance.CompleteRequest()를 사용 하면;Response.End()로 바 꾸 기;오류 가 발생 합 니 다:이상:코드 가 최적화 되 었 거나 이 컴퓨터 프레임 워 크 가 호출 스 택 위 에 있 기 때문에 표현 식 의 값 을 계산 할 수 없습니다.그러나 이 오 류 는 프로그램의 운행 에 영향 을 주지 않 습 니 다.try 는 이 이상 을 포착 할 수 있 지만(왜 그런 지 모 르 겠 습 니 다)인터넷 에서 이 문제 가 발생 하 는 원인 을 찾 았 습 니 다.Response.End,Response.Redirect 또는 Server.Transfer 방법 을 사용 하면 ThreadAbortException 이상 이 발생 합 니 다.try-catch 문 구 를 사용 하여 이 이상 을 포착 할 수 있 습 니 다.Response.End 방법 으로 페이지 의 실행 을 종료 하고 이 실행 을 응용 프로그램의 이벤트 라인 으로 전환 합 니 다.ApplicationEndRequest 이벤트.Response.End 뒤의 코드 줄 을 실행 하지 않 습 니 다.이 문 제 는 Response.Redirect 와 Server.Transfer 방법 에 나타 납 니 다.이 두 가지 방법 은 모두 내부 에서 Response.End 를 호출 하기 때 문 입 니 다.
제 공 된 해결 방법 은 다음 과 같다.
이 문 제 를 해결 하려 면 다음 방법 중 하 나 를 사용 하 십시오.
Response.End 에 대해 서 는 Response.End 대신 HttpContext.Current.Application Instance.CompleteRequest()방법 을 호출 하여 application 을 건 너 뜁 니 다.EndRequest 이벤트 의 코드 가 실 행 됩 니 다.
Response.Redirect 에 대해 Response.Redirect(String url,bool endResponse)를 다시 불 러 오 십시오.이 리 셋 은 Response 파라미터 에 false 를 전달 하여 Response.End 에 대한 내부 호출 을 취소 합 니 다.예 를 들 면:
Response.Redirect ("nextpage.aspx", false);
catch (System.Threading.ThreadAbortException e){
throw;
}
protected void btnOutput_Click(object sender, EventArgs e){
try{
string strPath = Server.MapPath("/") + "Download// .xls";
DownloadFile(strPath, " .xls");
}
catch (Exception exp){
Response.Write("<script>alert(' ://n" + exp.Message + "!//n .')</script>");
}
}
이 사건 을 통 해 알 수 있 듯 이 DownloadFile 함수 의 첫 번 째 매개 변 수 는 파일 의 절대 경로 입 니 다.그렇지 않 으 면 프로그램 이 잘못 알 릴 수 있 습 니 다.이상 은 본 고의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.또한 저 희 를 많이 지지 해 주시 기 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
작업 중 문제 해결 - (win 2003 asp. net) Session 과 페이지 전송 방법 으로 해결 방안 을 정상적으로 사용 할 수 없습니다.또한 F 는 처음에 우리 의 BP & IT 프로젝트 팀 이 Forms 폼 검증 을 사용 했다 고 판단 할 수 있 습 니 다. 페이지 를 뛰 어 넘 는 것 은http://hr.bingjun.cc/MyTask/MyTas...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.