2011-08-18 4 views
2

나는 "다운로드"링크가있는 웹 페이지가 있습니다.ASHX에서 웹 페이지로 돌아 가기

jQuery 사용하기 저는 Ajax를 사용합니다. ASHX 파일로 가져 오기.

ASHX에서는 파일 스트림을 가져옵니다. 그런 다음 스트림을 바이트 배열로 변환하고 바이트 배열을 호출하는 html 페이지로 반환합니다.

jQuery를

$(".DownloadConvertedPDF").click(function() { 
    var bookId = $(this).attr("bookId"); 

    $.get('/UserControls/download.ashx?format=pdf&bookId=' + bookId, {}, function (data) { }); 

}); 

나는 오류가 발생하지 않습니다뿐만 아니라 PDF가 화면에 표시되지 않습니다

context.Response.ContentType = "Application/pdf"; 
Stream fileStream = publishBookManager.GetFile(documentId); 
byte[] buffer = new byte[16 * 1024]; 
using (MemoryStream ms = new MemoryStream()) 
{ 
    int read; 
    while ((read = fileStream.Read(buffer, 0, buffer.Length)) > 0) 
    { 
    ms.Write(buffer, 0, read); 
    } 
} 

context.Response.OutputStream.Write(buffer, 0, buffer.Length); 

C 번호.

이상적으로 나는 pdf를 반환하고 jQuery가 브라우저 내의 별도의 탭에서 pdf를 시작하고 싶습니다.

어떻게해야합니까? 아니면 내가 뭘 잘못하고 있습니까?

답변

5

(.get를 사용하지 않는)이 시도 :

window.open('/UserControls/download.ashx?format=pdf&bookId=' + bookId, "pdfViewer"); 

는 "%의 PDF '로 시작하지 않는 파일"오류를 방지하려면 Response.BinaryWrite 사용 : 나는 또한 창을 사용하고

context.Response.Clear(); 
context.Response.ClearContent(); 
context.Response.ClearHeaders(); 
context.Response.ContentType = "application/pdf"; 

Stream fileStream = publishBookManager.GetFile(documentId); 
byte[] buffer = new byte[16 * 1024]; 
using (MemoryStream ms = new MemoryStream()) 
{ 
    int read; 
    while ((read = fileStream.Read(buffer, 0, buffer.Length)) > 0) 
    { 
    ms.Write(buffer, 0, read); 
    } 
} 

context.Response.BinaryWrite(data); 
context.Response.Flush(); 
+0

@griegs 다음'window.open' 방법을 사용합니다. '.get '이 효과가 있다고 생각하지 않습니다. – Mrchief

+0

아, 훨씬 나아졌지만 오류가 발생했습니다 "파일이 '% PDF-'로 시작하지 않습니다. – griegs

+0

그게 두려운 오류입니다! 내 업데이트 – Mrchief

0

을 pdf를 얻기를 위해 .open. 하지만 항상 로그인하지 않고 주소 표시 줄을 통해 동일한 URL을 사용하려고 시도하면서 표시됩니다.이 문제를 해결하는 방법.

0

context.Response.TransmitFile의 사용을 통해, ASHX 웹 핸들러에서 PDF를 제공하는 더 간결한 방법은 다음과 같습니다

context.Response.Clear(); 
context.Response.ContentType = "application/pdf"; 
string filePath = System.Web.HttpContext.Current.Server.MapPath(@"~\path-to\your-file.pdf"); 
context.Response.TransmitFile(filePath); 
관련 문제