2009-07-21 5 views
1

양식 데이터를 PDF로 내보내는 옵션을 제공하는 웹 페이지가 있습니다. 런타임에 PDF를 만들고 응용 프로그램 디렉토리 아래에있는 "PDF"폴더에 PDF를 저장합니다. 새 브라우저 창에 PDF 파일을 표시하려면 SessionID 이름으로 PDF를 만든 후 다음 함수를 호출하십시오.ASP.Net에서 응용 프로그램 임시 파일 삭제

ResponseHelper.Redirect (응답, "~/PDF /"+ Session.SessionID + ".pdf", " _Blank "," ");

이 PDF는 로그인 한 사용자와 관련된 개인 정보를 포함합니다. 따라서 브라우저에 사용자에게 표시되면이 PDF 파일을 삭제하는 방법을 원합니다. 이는 IIS 서버가 보안 위험이있는이 폴더를 전체 개발 팀이 볼 수있게하고 사용자가 서버에서이 폴더를 볼 수 없도록 할 수 없기 때문입니다.

따라서 브라우저에로드되는 즉시이 파일을 삭제할 수 있다면이 보안 위험의 해결책이 될 수 있습니다.

누구나 응용 프로그램에서 가능한 빨리이 파일을 삭제하는 더 좋은 방법을 제안 할 수 있습니까?

덕분에, 프라 빈

답변

0

한 가지 방법은 완료되면 다음 삭제, 브라우저에 PDF 스트림 ASHX 처리기를 작성하는 것입니다.

또 다른 좋은 방법은 단순히 PDF를 메모리에 작성하고 (세션을 사용하지 않고) 준비가 완료되는 즉시 스트리밍하는 것입니다.

UPDATE

나는 iTextSharp의 약간 수정 된 버전으로이 일을하고 있습니다. 기본적으로 iTextSharp는 모든 작업을 메모리에서 수행 한 다음 파일을 디스크에 저장했습니다. 나는 이것을 메모리 스트림을 반환하도록 변경했다. 모든 코드가 이미 있습니다. 실제로 변경해야 할 라인은 두 줄뿐입니다.

그런 다음 response.binarywrite를 사용하여 스트림을 브라우저로 직접 푸시했습니다. 비올라! 디스크에 파일이 없습니다.

ashx 처리기는 aspx 페이지와 동일하며 입력 지점이 하나만 있으며 페이지 처리 가비지를 모두 수행하지 않습니다. 가벼운 무게와 response.write 호출에 의해 브라우저와 다시 통신합니다. 난 당신이 iText를 사용하여 런타임에 PDF 파일을 작성 한 다음 임시 디렉토리에 해당 PDF 파일을 저장할 사용자에게 보여주는 것입니다 어떻게 됐을까

+0

iText를 사용하여 PDF를 작성하고 있습니다. 디스크에 저장하지 않고 PDF를 스트리밍 할 수 있습니까? 이해할 수 있도록 샘플 코드 나 링크를 제공해주십시오. – user423574

+0

iText 또는 포트 (예 : iText.Net, iTextSharp)를 사용하고 있습니까? – MyItchyChin

1

... 왜

Response.WriteFile (PDFFILE를 사용하지 않는);

임시 폴더에 저장하지 않고 전체 파일을 스트림에 씁니다.

+0

iText.Net을 사용하고 있습니다. 사실 파일을 만드는 코드는 다음 줄부터 시작합니다. PdfWriter pdfWriter = PdfWriter.getInstance (document, new FileStream (ConfigurationSettings.AppSettings [ "PDFFilePath"] + Session.SessionID + ".pdf", FileMode.Create)); 이렇게하면 PDF 파일이 항상 만들어집니다. 끝나면 document.close();를 호출합니다. 그래서 Respone을 호출해야합니까?WriteFile() 및 인수로 filepath가 필요하기 때문에 전달되어야하는 인수. – user423574

관련 문제