2013-09-29 1 views
2
public void Downloadfile(string sFileName, string sFilePath) 
{ 
    HttpContext.Current.Response.Clear(); 
    HttpContext.Current.Response.ClearContent(); 
    HttpContext.Current.Response.ClearHeaders(); 
    HttpContext.Current.Response.ContentType = "APPLICATION/OCTET-STREAM"; 
    String Header = "Attachment; Filename=" + sFileName; 
    HttpContext.Current.Response.AppendHeader("Content-Disposition", Header); 
    HttpContext.Current.Response.AppendHeader("Cache-Control", "no-cache"); 
    System.IO.FileInfo Dfile = new System.IO.FileInfo(HttpContext.Current.Server.MapPath(sFilePath)); 
    HttpContext.Current.Response.TransmitFile(Dfile.FullName); 
    HttpContext.Current.ApplicationInstance.CompleteRequest(); 
} 

다운로드 버튼이 있는데, 클릭하면 해당 파일 다운로드가 나옵니다. 그러나 파일 반환은 detailt.aspx입니다. 파일. 나는 무슨 일이 일어나고 있는지 이해하지 못한다. 도움이 필요합니다. 고마워요.ASP.net 다운로드 파일 ASP.NET에서 HttpContext.Current.Response.TransmitFile을 사용합니다.

답변

6

이것은 잠시 동안 문제없이 나와 함께 해주었습니다.

public void Downloadfile(string sFileName, string sFilePath) 
{ 
    var file = new System.IO.FileInfo(sFilePath); 

    Response.Clear(); 
    Response.AddHeader("Content-Disposition", "attachment; filename=" + sFileName); 
    Response.AddHeader("Content-Length", file.Length.ToString(CultureInfo.InvariantCulture)); 
    Response.ContentType = "application/octet-stream"; 
    Response.WriteFile(file.FullName); 
    Response.End(); 
} 
+1

감사합니다. David Negron reply. 그러나 Response.End()를 사용할 때 예외 : 예외 = {코드가 최적화되었거나 기본 프레임이 호출 스택 위에 있기 때문에 표현식을 평가할 수 없습니다.} 버그를 이해하지 못합니다. 설명해 주시겠습니까? – user2828601

+0

Downloadfile이 호출 된 후 어떤 추가 코드를 실행하려고 시도하고 계십니까? 내가 물어 보는 이유는 일반적으로 HttpHandler 내에서이 유형의 코드를 호출하기 때문입니다. 이에 대한 예를 보려면 http://geekswithblogs.net/hmloo/archive/2012/03/07/how-to-download-files-using-a-generic-handler.aspx를 참조하십시오. –

관련 문제