2014-06-12 3 views
1

나는 다운로드가 완료되었다는 것을 사용자에게 말하고 닫기 버튼을 프롬프트하는 시나리오가 있습니다. 이를 위해 jquery 플러그인을 사용하여이 다운로드가 완료되면 쿠키를 지속적으로 모니터링합니다.파일 다운로드가 완료된 후에 만 ​​쿠키를 설정하십시오.

내 문제는 다운로드가 완료 되 자마자이 쿠키 (fileDownload = true and path="/")를 설정하고 싶습니다. 이를 위해이 쿠키를 설정하기위한 다양한 위치를 시도했습니다. 그러나 매번 다운로드가 시작되기 전에 쿠키가 설정됩니다.

쿠키를 설정하는 코드입니다.

Cookie fileDwnld = new Cookie("fileDownload", "true"); 
fileDwnld.setPath("/"); 
response.addCookie(fileDwnld); 

이 파일은 파일을 가져 와서 출력 스트림을 통해 브라우저로 스트리밍하는 코드가있는 서블릿에 설정됩니다.

내 유일한 문제는 파일이 다운로드되기 전에 쿠키가 설정된다는 것입니다.

제안 사항. 나는 Tomcat 7. Java 1.6, 서블릿을 사용하고있다. 내가 사용하고있는 jquery 플러그인은 fileDownload.js입니다 (어느 쪽이 범인이 아니라고 생각합니다).

미리 감사드립니다.

답변

1

저는 RaviH와 Marco가 제안한 것에 대해 몇 가지 일을했습니다. Jquery fileDownload Plugin을 사용하여 다운로드가 시작될 때를 모니터링하고 그에 따라 영상을 변경했습니다. 그런 다음 successCallback 이벤트에서 다운로드 상태에 대해 서버에 지속적으로 폴링하는 JS 코드 조각을 시작합니다.

나는 스트림을 통해 파일을 푸시하는 서블릿의 세션 속성을 설정하여이 작업을 수행했습니다. 세션 속성 이름에는 요청과 함께 전송 된 임의 문자열이 들어 있습니다. 내 경우 밀리 초 단위로 현재 시간을 보내고 있습니다 (예 : DOWNLOAD_STATUS_(Random Code)). 나는 진행 응답을하는 동안 브라우저에

Again when I am polling I am resending the same Random Code through ajax and get the status. The three status I am using are `STARTED`,`PROGRESS` and `COMPLETE`. 

나는 진행 또는 로딩 애니메이션을 보여하지만 난이 전체 응답을받을 때 나는 완전한 다운로드를 보여 같은 적절한 변경했습니다.

희망이 다른 도움.

0

쿠키는 HTTP 프로토콜의 set-cookie 헤더를 사용하여 설정됩니다. 이것은 헤더이므로 다운로드가 완료되면 요청이 끝날 때 쿠키를 설정할 수 없습니다. 다른 방법으로이 작업을 수행해야합니다. 서버에서 다운로드 완료를 추적 한 다음 서버를 폴링하여이를 감지 할 수 있습니다. 다른 방법은 long-polling/혜성을 사용하는 것입니다.

1

successCallback (사용중인 플러그인이 this 인 경우)에서 다른 요청 (AJAX/jquery 사용)을하고 응답의 쿠키를 설정하는 다른 서블릿을 가리킬 수 있습니다.

관련 문제