서버에서 파일을 다운로드 할 수있는 웹 응용 프로그램이 있습니다. 문서는 Office 파일 (.docx, pptx, .xslx) 또는 Pdf 일 수 있습니다.Office 파일을 다운로드하면 파일을 열기 전에 aspx 페이지가 다시로드됩니다.
논리는 매우 간단합니다. 클라이언트 측에서 클릭하면 웹 서비스가 호출되고 필요한 매개 변수를 전달하는 aspx 페이지 (Print.aspx)가 호출됩니다.
protected void Page_Load(object sender, EventArgs e)
{
string fileName = Request.QueryString["fname"];
if (string.IsNullOrEmpty(documentID) == false)
{
byte[] document = GetPhysicalFile(documentID); //Get the binaries
showDownloadedDoc(document, fileName);
}
}
private void showDownloadedDoc(byte[] document, string fileName)
{
Response.Clear();
Response.ContentType = contentType;
Response.AppendHeader("content-disposition", string.Format("attachment; filename=\"{0}\"", fileName));
Response.BufferOutput = false;
Response.BinaryWrite(document);
Response.Close();
}
PDF 문서는 Print.aspx 페이지에서 열립니다 및 영문 페이지가 한 번만로드 : 인쇄 페이지 선택한 문서의 바이너리를 검색하고 응답을 작성하는 웹 서비스를 호출합니다. Office 파일의 경우 Page_Load() 메서드가 3 번 호출됩니다.
처음으로 문서 열기/저장 대화 상자가 열리고 "열기"를 클릭하면 Page_Load가 두 번 호출 된 후 문서가 마침내 MS Word에서 열립니다.
이러한 문서를 여는 데 여러 페이지가로드되는 것을 방지 할 수있는 방법이 있습니까? 각 액세스에 대한 파일이 만들어지기 때문에 서버 측에 파일을 저장하고 해당 URL로 리디렉션하지 않아야합니다.
이에 대한'GenericHandler'를 사용하지 않는 이유가 거기에 예입니다? ashx – Bazzz
내 접근 방식을 사용하면 사용자가 문서를 다운로드하도록 할 수있는 가장 쉬운 방법이라고 생각했습니다. 응용 프로그램은 회사의 인트라넷에서만 사용됩니다. GenericHandler가 다중 페이지로드로 현재 문제를 해결하는 방법은 무엇입니까? – Francesco
genericHandler를 사용하면 aspx 페이지 (+1, 좋은 아이디어)와 같은 LifeCicle을 가지지 않을 것입니다. – Francesco