2012-12-13 2 views
1

사용자가 날짜 범위를 입력 한 다음 해당 기간을 기준으로 검색 한 데이터가 포함 된 Excel 파일을 다운로드 할 수있게하려고합니다.양식 제출에 대한 응답으로 Excel 파일 다운로드

처음에는 같은 페이지에 대한 GET 요청 양식을 제출하여이 작업을 수행했습니다. GET 매개 변수가 있으면 페이지에서 데이터를 검색하고 필요한 헤더를 출력 한 다음 데이터를 출력합니다. 그런 다음 Excel 데이터로 헤더를 보내야하기 때문에 페이지가로드되지 않도록 프로세스에서 exit;을 얻습니다.

이것은 작동합니다. 그러나 일단 데이터가 전송되면 사라질 진행률 표시기를 포함하고 싶습니다. 그러나 나는 이것을 할 방법을 찾을 수 없습니다.

양식 제출 버튼을 누르면 표시기가 시작될 수 있지만 다운로드를 위해 문서가 출력 된 후에는 표시기를 끌 수있는 방법을 찾을 수 없습니다.

아약스는 이러한 상황에서 작동하지 않습니다.

누구든지이 방법을 제안 할 수 있습니까? 그래서 여기에 제안을 봤어요 loading the output into a hidden iframe에 대한하지만 난이 일을 자신을 어떻게 이해가 안 돼요.

+0

다음 질문은 유용합니까? http://stackoverflow.com/questions/13383144/reading-filesystem-and-returning-it – SaidbakR

+1

파일을 다운로드하는 경우 이미 브라우저에서 제공하는 표시기가 있습니다. 왜 다른 걸 필요로하니? 어떤 사람들은 다운로드 매니저 나 바이러스 백신을 가지고 있습니다. – MAXIM

+1

@ sємsєм 아니요. 이미 데이터가 올바르게 반환되고 있습니다. 일단 헤더와 데이터가 출력되면 스크립트는 페이지와 더 이상 상호 작용할 수 없기 때문에 진행 표시기가 회전을 멈출 수 없습니다. – Lothar

답변

2

내가 기반을 둘 수있는 코드가 없기 때문에 대부분 이론을 작성합니다.

사용자 요청은 파일을 작성하는 내부 프로세스는 사용자에게 진행률 표시 줄을 표시하는 시간 동안, 소요 페이지를로드 파일

를 다운로드합니다.

헤더 기능이있는 사용자에게이 파일을 보내는 대신 (화면에 이미 인쇄 할 때 사용할 수 없음) 파일을 임시 디렉토리에 저장하십시오. 바람직하게는 임의의 이름 또는 타임 스탬프로 호출하십시오.

header('Content-disposition: attachment; filename=your_excel_file.xls'); 
header('Content-type: application/xls'); 
readfile('tmp_dir/whatever_you_called_it.xls'); 

unlink ('tmp_dir/whatever_you_called_it.xls'); 

는 항상 좋은하기 : 화면에 파일 생성 인쇄의 말

이 같은 자바 스크립트 명령 : 엑셀 이런 식으로 뭔가를 다운로드에 대한

<script language=”JavaScript”> 
self.location=”download.php?file=whatever_you_called_it.xls”; 
</script> 

는 헤더를 설정 너 자신 후에 물건을 청소해라. 무언가가 삭제되지 않을 가능성이 있음을 유의하십시오. 따라서 가비지 컬렉터를 사용하는 것이 좋습니다. 공개 디렉토리에서 파일을 지우지 마십시오.

데이터가 민감하지 않은 경우 분명히 자바 스크립트를 파일에 직접 설정하면 브라우저에서 직접 다운로드 할 수 있습니다. 그런데 생성 된 모든 파일을 정리하기 위해 일종의 가비지 컬렉터가 필요할 것입니다 ... 더러워지면 ... 더러워 질 것입니다 ...

관련 문제