2010-04-03 6 views
1

사용자에게 다운로드 할 파일이있는 기능이 있습니다. 잘 작동합니다. -사용자가 파일을 다운로드했는지 여부를 아는 방법은 무엇입니까?

  1. 사용자가 파일을 다운로드했는지 또는 취소했는지 확인하는 방법은 무엇입니까?
  2. 다운로드 후 현재 페이지를 다른 페이지로 리다이렉트하고 있습니다.

혹시 알려 주시면 알려 주시기 바랍니다.

안부를 (I 줌라로하고 있습니다), Shahu

답변

4

그것은 당신이 가고 싶은 얼마나 많은 문제에 조금 따라 달라집니다.

유일한 방법은 그들이 실제로이 기본 웹 서버 사용중인 Joomla를 또는 무엇이든 후킹 클라이언트로 파일을 전송하는 행위에   — 그래서 어느 의미 훅하는 파일을 다운로드 여부를 알거나하는 다운로드는 기본적으로 디스크에서 파일을 읽고 전송하는 PHP 페이지를 통해 진행됩니다. 비록 당신이 그렇게하더라도, 정말로 당신이 알고있는 것은 파일이 브라우저에 의해 요청되었고 요청을 만족 시켰기 때문입니다. 사용자가 바로 뒤에 버리지 않았 음을 알 수 없습니다.

완료되었을 때 리디렉션을 보여주는 관점에서 볼 때 위와 같이 프로세스에 연결 한 경우 파일을 다운로드했는지 여부를 플래그로 지정할 수 있습니다 (예 : 마지막 바이트를 보낸 후). . Ajax를 사용하여 주기적으로 해당 세션 플래그의 상태를 쿼리하고 플래그가 다시 돌아 오면 자바 스크립트를 사용하여 클라이언트에서 리디렉션을 수행 할 수 있습니다.

당신이 알아야 할 것은 으로 시작 했으므로 쿠키 메커니즘을 사용하면됩니다. 파일을 다시 보낼 때 응답에 쿠키를 추가하십시오. (위와 같이 PHP 파일을 통해 다운로드를 퍼널하거나 웹 서버의 설정이 매우 복잡 할 경우   — 아파치가이를 수행 할 수 있습니다. 예를 들어,   —과 같이 쿠키를 자동으로 추가하도록 설정할 수 있습니다. 파일을 다운로드했는지 (적어도 으로 시작하여 다운로드하려면) JavaScript를 사용하여 트래픽이 적은 쿠키 (서버 폴링이 아니라)를 주기적으로 확인합니다. This question and answer (조금) 조금 더 자세히 얘기하고 있습니다. 나는 서버가 다운로드를 위해 커다란 PDF 나 ZIP을 커스텀 빌드하는 어플리케이션에서 이것을한다. 나는 파일을 요청할 때 "building"div를 보여주고 쿠키를 폴링하고 쿠키가있을 때 "building"div를 제거한다. 나타나다. 주요 브라우저에서 브라우저는 파일을 디스크에 저장할지 열지 묻는 상자를 표시하는 즉시 표시됩니다. 둘 다 응답을 반환하므로 트리거됩니다.

위의 내용이 너무 복잡하고 (일부 사용 사례의 경우 가능할 것으로 생각됩니다) 다운로드 링크에 JavaScript click 이벤트 처리기를 넣을 수 있습니다. 그러면 링크를 클릭했음을 알 수 있지만 그 외에도 많은 정보를 알려주지는 않습니다.

+0

안녕하세요, 정보를 제공해 주셔서 감사합니다. 사실이 모든 것은 내가 이해하기에 조금 무겁습니다. 하지만 파일을 다운로드하기 위해 헤더를 보내는 afetr을 리다이렉트했다. 사용했습니다 - header ("refresh : 2; url = index.php"); 2 초 후에 index.php로 redirecs됩니다. – user251336

+0

@ user251336 : 아, 거기 있네. :-) –

관련 문제