Asp.net 에서 Excel 파일 을 생 성하 고 다운로드 합 니 다.(업데이트:파일 이 아 닌 빠 른 레이 다운로드 페이지 를 사용 하 는 문제 해결)

서버 에서 엑셀 파일 을 만 든 다음 파일 주 소 를 이용 해 다운로드 하 는 방법 을 사용한다.Excel 파일 을 만 드 는 방법 은 다음 과 같 습 니 다.[원].Net 에서 Excel 파일 을 만 드 는 방법(데이터 삽입,형식 수정,도표 생 성)은 Response.Write File 을 먼저 사용 하 는 방법 입 니 다
 
FileInfo fi = new FileInfo(excelFile);//excelFile
HttpResponse contextResponse = HttpContext.Current.Response;
contextResponse.Clear();
contextResponse.Buffer = true;
contextResponse.Charset = "GB2312"; //
contextResponse.AppendHeader("Content-Disposition", String.Format("attachment;filename={0}", excelName)); //
contextResponse.AppendHeader("Content-Length", fi.Length.ToString());
contextResponse.ContentEncoding = Encoding.Default;
contextResponse.ContentType = "application/ms-excel";// excel 。

contextResponse.WriteFile(fi.FullName);
contextResponse.Flush();
contextResponse.End();
그 중에서 첫 번 째 줄 의 엑셀 파일 은 Excel 파일 이 서버 에 있 는 주소 입 니 다.예 를 들 어"C:\Website\Excel\xx.xlsx"입 니 다.이런 방법 도 인터넷 에서 일반적으로 제공 하 는 방법 이지 만 실제 작업 에서 의향 이 없 는 문제 가 발생 했다.크롬 에서 모든 것 이 정상 적 이 고 엑셀 파일 은 크롬의 기본 다운로드 폴 더 에 직접 다운로드 된다.
image
Firefox 에서
FlashGot 플러그 인 이 설치 되 어 있 기 때문에 먼저 다운로드 도 구 를 선택 합 니 다.
image
이 디 스 플레이 는 정상 입 니 다.'파일 저장'을 선택 하면 Excel 파일 도 기본 폴 더 에 저 장 됩 니 다.그러나 제3자 다운로드 도 구 를 사용 해 보십시오.예 를 들 어 천둥 같은 경우 다음 창 이 나타 납 니 다.
image
 
 
웹 주소 표시 줄 을 주의 하면 페이지 의 실제 주소 뒤에 ViewState 정 보 를 추가 하고 다른 이름 도 Excel 파일 자체 의 이름 이 아니 라 페이지 의 이름 입 니 다.
확인 을 누 르 면 다운 로드 된 파일 이 실제 파일 로 변 합 니 다.
image
IE7 에서
image
저장 대화 상 자 를 먼저 팝 업 합 니 다.파일 이 정상 입 니 다.마찬가지 로 천둥 이 쳤 기 때문에 저장 을 누 를 때 천둥 이 치 는 다운로드 대화 상 자 를 팝 업 합 니 다.Firefox 와 달리 사이트 뒤에 ViewState 정보 가 없습니다.
image  
확인 을 누 르 면 페이지 파일 을 다운로드 합 니 다:
image
벼락 다운로드 대화 상자 에서 취소 하면 IE 다운 로드 를 사용 합 니 다.이 파일 은 또 정확 합 니 다.
image
센 레이 는 다운로드 대화 상자 의 사이트 주소 에 따라 다운 로드 를 다시 요청 하 는 것 으로 의심 되 며,요청 한 페이지 와 는 무관 하 며,IE 는 ViewState 정 보 를 센 레이 에 전송 하지 않 아 다운로드 한 파일 이 원 하 는 엑셀 페이지 가 아 닙 니 다.
그 후에 단계별 로 다운로드 하 는 방식 을 시 도 했 지만 사실은 무효 입 니 다.왜냐하면 신속 한 레이 는 당신 이 제공 한 다운로드 체 제 를 전혀 무시 하기 때 문 입 니 다.그리고 이렇게 Firefox 에서 신속 한 레이 를 호출 할 때 단계별 로 다운로드 한 Viewstate 는 Excel 파일 의 완전한 정 보 를 포함 하지 않 기 때문에 신속 한 레이 가 다운로드 한 것 도 부족 한 파일 입 니 다.
마지막 으로 가장 촌 스 러 운 해결 방법 만 사용 할 수 있 습 니 다:Response.Redirect(),실제 파일 주소 로 전환 합 니 다
 
FileInfo fi = new FileInfo(excelFile);
HttpResponse contextResponse = HttpContext.Current.Response;
contextResponse.Redirect(string.Format("~/Template/{0}", excelName), false);
이렇게 세 브 라 우 저 에서 테스트 하 는 것 은 모두 정상 입 니 다.실제 파일 의 주 소 를 요 청 했 기 때문에 번개 에 표 시 된 것 도 실제 파일 의 주소 입 니 다.다운 로드 는 문제 가 없 을 겁 니 다.그러나 이 는 클 라 이언 트 사용자 파일 의 실제 주 소 를 알려 주 는 것 으로 프라이버시 가 좋 지 않다.다행히 이곳 에 서 는 좋 은 프라이버시 가 필요 하지 않 고 파일 이 일정 시간 후에 삭제 되 기 때문에 큰 문제 가 되 지 않 습 니 다.위 에서 처음 고려 한 결과 인 데 게 으 른 것 같 습 니 다...............................................................................즉,"Excel 생 성"단 추 를 눌 렀 을 때 다른 Export 페이지 로,이 페이지 에 있 는 PageLoad 방법 에서 엑셀 파일 을 만 들 고 엑셀 파일 을 다운로드 하 는 절 차 를 마 쳤 습 니 다
 
String fileName = Request.QueryString["FileName"];
String exportName = Request.QueryString["Export"];
if(fileName != null)
{
ExportManger.CreateExcel(fileName);// Excel 。
Response.Redirect(String.Format("{0}?Export={1}",Request.Path.ToString(),fileName));// , Query Export。
}
else if(exportName != null)
{
ExportManger.ExportExcel(exportName);// Excel 。
}
이 페이지 는 두 번 뛰 었 는데 첫 번 째 는 엑셀 생 성 이 고 두 번 째 는 엑셀 다운로드 이다.두 번 뛰 는 이 유 는 센 레이 가 마지막 URL 을 캡 처 하고,생 성과 다운로드 가 함께 진행 되면 센 레이 다운로드 시 엑셀 파일 을 다시 생 성 하 는 것 을 반복 하기 때문이다.엑셀 파일 을 다운로드 하 는 코드 인 ExportManger.ExportExcel(exportName)은 본문 에서 처음에 소개 한 Response.Write 방법 을 사 용 했 고 단계별 로 다운로드 하 는 방법 도 사용 했다.그러면 파일 이 필요 한 것 이 일회 성 이 고 다운로드 할 때마다 다시 생 성 되 어야 한다 면 Export 페이지 의 다운로드 와 생 성 을 함께 해 야 합 니 다.그 다음 에 시작 하 는 Response.Write 방법 을 마지막 으로
 
if(fi.Length > 0)
{
FileStream sr = new FileStream(fi.FullName,System.IO.FileMode.Open,System.IO.FileAccess.Read, System.IO.FileShare.Read);
int size = 1024;// 。
for (int i = 0; i < fi.Length / size + 1; i++)
{
byte[] buffer = new byte[size];
int length = sr.Read(buffer, 0, size);
contextResponse.OutputStream.Write(buffer, 0, length);
}
sr.Close();
}
else
{
contextResponse.WriteFile(fi.FullName);
}
즉,응답 을 비 운 후에 파일 을 먼저 삭제 한 다음 에 응답 을 끝 냅 니 다.이렇게 하면 다운로드 도 구 를 이용 하여 다운로드 할 수 없 는 문 제 를 해결 하고 서버 파일 주소 의 프라이버시 를 보호 하 며 세그먼트 로 기록 하 는 방법 으로 큰 파일 을 쓸 수 있 으 며 필요 에 따라 생 성 된 파일 을 즉시 삭제 하여 서버 공간 을 차지 하지 않 을 수 있다.

좋은 웹페이지 즐겨찾기