2011-08-09 8 views
4

에서 파일을 열 내가에서 .aspx 페이지와이를 통해 이동하여 파일을 다운로드 생각하는 것은 파일을다운로드 및 jQuery를

HttpContext.Current.Response.ContentType = "APPLICATION/OCTET-STREAM"; 
String Header = "Attachment; Filename=" + sFileName; 
HttpContext.Current.Response.AppendHeader("Content-Disposition", Header); 
FileInfo Dfile = new FileInfo(HttpContext.Current.Server.MapPath(sFilePath)); 
HttpContext.Current.Response.WriteFile(Dfile.FullName); 
HttpContext.Current.Response.End(); 

을 반환하고 괜찮아요.

jQuery를 사용하여 async ajax 호출을 통해이 작업을 수행 할 수 있기 때문에 파일을 다운로드하는 동안 사용자가 GIF 회 전자 애니메이션을 볼 수 있습니다.

$("#showbusy").fadeIn(); 
$.ajax({ async : true, type: "GET", url: "download.aspx", 
     contentType: "application/text; charset=utf-8", 
     success: function (data) { 
      $("#showbusy").hide(); 
     }, 
     error: function (xmlHttpRequest, textStatus, errorThrown) { 
      $("#showbusy").hide(); 
     } 
    }); 

전에서 .aspx 페이지 파일 다운로드로 직접 이동,하지만 어떤 이유로이 페이지에 Ajax 호출을 수행하여 작동하지 않는 경우. Firebug에서 데이터가 반환되는 것을 볼 수 있지만 일단 다운로드가 완료되면 메모리에 저장됩니다.

파일 다운로드 데이터를받은 후 실제로 브라우저 측에서 파일 저장 대화 상자를 실행하려면 어떻게해야합니까?

+1

나는 이것이 당신의 문제라고 생각한다. 해결책 : http://stackoverflow.com/questions/1106377/detect-when-browser-receives-file-download – karim79

+0

HttpContext.Current.Response.TransmitFile ("filename"). AJAX 호출을 사용하는 대신 다운로드 링크를 숨겨진 iframe으로 이동하십시오. 이렇게하면 페이지를 새로 고치지 않고 다운로드 상자가 표시됩니다. –

답변

0

사용자가 디스크에 넣을 수 있으려면 다운로드 대화 상자를 통해 다운로드를 시작해야합니다.

파일을 미리 가져온 다음 사용자가 파일을 디스크의 어딘가에 저장하는 저장 대화 상자를 표시하는 것이면 javascript를 통해 수행 할 수 없습니다.

당신은 (현재하고있는 일) 아약스를 통해 파일을 다운로드하라는 전화를하고 콘텐츠를 보낼 때 응답 캐시 헤더를 제공 한 다음 사용자가 즉시 보일 수있게 할 수 있습니다. AJAX 호출과 동일한 URL에 대한 다운로드 대화 상자 (예 : iframe을 통해) 팝업. 이렇게하면 (AJAX 호출이 완료되면 생성 된) 캐시에서 사용자의 디스크로 파일을 저장하는 브라우저가 생성됩니다.

+0

맞습니다. 일부 사용자 에이전트가 캐시에 보관하지 못할 수도 있지만 (우리는 비정상적으로 또는 아마도 큰 파일에 대해 이야기하고 있습니다.) 결국 두 번 다운로드하게됩니다. (특히 휴대 기기에서 가격이 비싼 대역폭을 사용할 수 있습니다.) –