2009-10-07 4 views
2

새 브라우저 창에 Outputstream을 작성하려면 어떻게해야합니까?출력 스트림을 새 창에서 작성하십시오.

현재 아래 코드가 있습니다. 분명히 그것은 같은 창에서 스트림을 엽니 다. Outputstream을 파일에 쓰고 새 창에서 열 수는 있지만 옵션이 아닙니다.

protected void openPDF(byte[] dados) { 

    HttpContext contexto = HttpContext.Current; 

    contexto.Response.Clear(); 
    contexto.Response.AppendHeader("content-type", "application/pdf"); 
    contexto.Response.AppendHeader("Expires","Mon, 26 Jul 1990 05:00:00 GMT"); 
    contexto.Response.AppendHeader("Cache-Control","no-cache, must-revalidate"); 
    contexto.Response.AppendHeader("Pragma","no-cache"); 
    contexto.Response.Expires = -1; 
    contexto.Response.AppendHeader("Content-Disposition", "inline; filename=labels.pdf"); 
    contexto.Response.AddHeader("content-length", dados.Length.ToString()); 
    contexto.Response.OutputStream.Write(dados, 0, dados.Length); 
    contexto.Response.OutputStream.Flush(); 
    contexto.Response.End(); 
    } 

답변

1

파일을 요청하는 링크는 새 브라우저 창을 지정해야합니다. 요청이 서버로 전송

<a href="/path/to/file" target="_blank">PDF</a> 

되면, 서버는 단순히 다른 대상을 지정하지 않는 한,이를 요청한 창에 넣어 결과로 응답합니다. 분명히 첨부 파일로 변경하면 다운로드하라는 메시지가 표시되지만이를 알고 있으므로 피하고 싶습니다.

다른 해결책은 새 창을 열고 데이터를 가져 오기 위해 실제 자바 스크립트를 사용하는 응답을 작성하는 것입니다. 항상 새로운 창에서 원하는 것을 알고 있다면 링크를 변경하여 새 창을 지정하는 것이 더 나은 해결책이라고 생각합니다.

1

서버가 적합하다고으로 혼자 ... 서버는 요청 클라이언트 표시에 응답

가 /이 응답을 사용 할 수 없습니다.

클라이언트가이 PDF 파일 (또는 다른 내용)을 새 브라우저 창에서 요청하게하여 응용 프로그램의 흐름을 변경해야합니다. 예를 들어, 사용자가 링크를 클릭 한 다음 PDF가 현재 전송 된 경우, a 요소에 target = 'some_window_name' 속성을 추가하여 으로 간단히 수행 할 수 있습니다.

즉, 서버가 요청을 받으면 응답하기 위해 '대상'을 변경하기에는 너무 늦습니다 (*). 따라서 클라이언트가 새 브라우저 창에서 /로 요청을 보내도록하는 것이 좋습니다.

(*) 너무 늦게 ...
음 ... 아마, 누군가가 어떻게 든 새 브라우저 창을 열고 것입니다 몇 가지 자바 스크립트 enveloppe에 응답 포장의 영리한 방법을 찾을 수 있습니다 (?) 주요 내용 PDF 콘텐츠 아니면 어쩌면 다른 트릭 ... 어쨌든 이것은 다소 고의적 인 작업 일 것입니다 ... (브라우저가 올바른 상황에서 질문하는 것과 비교하면)

0

파일이 포스트 백의 일부로 생성되고 있습니까? 그렇다면 까다 롭습니다. 가장 좋은 옵션은 Content-Dispositionattachment으로 변경하여 파일을 표시하는 대신 사용자에게 열기/저장 대화 상자를 표시하는 것입니다. 그렇지 않다면 링크에 target="_blank"을 사용하는 것이 해결책입니다. 당신이 파일을 생성해야

+0

는 기본적으로, 나는 셰어는 WebPart에서 버튼을 누르면 새 창에서 로컬 파일을 열 수 있습니다. webpart를 호출하는 webpart는 byte []를 반환합니다. 내가 원하는 것은 새로운 윈도우에 바이트 [] (pdf 파일)를 쓰는 것입니다. 같은 윈도우에서 열면 사용자 친화적이지 않습니다 (ish). – none

+0

새 창을 열기 위해 일부 자바 스크립트를 호출하려면 webpart의 단추를 변경해야합니다. 새 창은 새로운 페이지 요청이어야하며 쿼리 문자열에서 웹 서비스를 호출하는 데 필요한 모든 문맥 데이터를 전달해야합니다. batwad

-1

, 당신은이 코드는

Process process = new Process(); 
process.StartInfo.UseShellExecute = true; 
process.StartInfo.FileName = outputPdfFile; 
process.Start(); 
+0

-1 : 이것은 asp.net입니다. –

관련 문제