>웹 프론트엔드 >JS 튜토리얼 >브라우저 이벤트 없이 브라우저 파일 다운로드 완료를 어떻게 안정적으로 감지할 수 있습니까?

브라우저 이벤트 없이 브라우저 파일 다운로드 완료를 어떻게 안정적으로 감지할 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-23 21:11:14437검색

How Can We Reliably Detect Browser File Download Completion Without Browser Events?

브라우저 파일 다운로드 완료 감지

문제 설명

동적 파일 다운로드 메커니즘을 갖춘 페이지에는 시각적 표시기가 필요합니다. 다운로드가 완료되면 신호를 보냅니다. 그러나 "저장" 대화 상자가 나타날 때 브라우저가 항상 파일 수신을 나타내는 이벤트를 트리거하는 것은 아닙니다.

서버 응답 제한

"콘텐츠 처리: attachment" 헤더는 브라우저에 "저장" 대화 상자를 표시하도록 지시하지만 이벤트에 사용되는 iframe 로드를 억제합니다. 모니터링.

제안된 솔루션

JavaScript 및 서버 측 쿠키를 활용하는 클라이언트 기반 솔루션 구현:

클라이언트 알고리즘

  1. 독특한 토큰.
  2. 토큰과 함께 다운로드 요청을 제출합니다.
  3. "대기" 표시기를 표시합니다.
  4. 일치하는 "fileDownloadToken"이라는 쿠키를 정기적으로 서버에 폴링합니다.
  5. 쿠키가 발견되면 "대기"를 제거하세요. 표시기.

서버 알고리즘

  1. 요청에서 토큰을 추출합니다.
  2. "fileDownloadToken"이라는 이름의 쿠키를 생성합니다. 그 값을 수신된 값으로 설정합니다. token.

구현 예

  • 클라이언트 측 JavaScript(단순화)
var downloadToken = setFormToken();

var downloadTimer = setInterval(function() {
  var token = getCookie("fileDownloadToken");

  if(token == downloadToken) {
    unblockSubmit();
  }
}, 1000);
  • 서버측 PHP(단순화)
// Set a cookie to unblock the submit button when download starts
$this->setCookieToken("downloadToken", $_GET["downloadToken"]);

$result = $this->sendFile();

이점

  • 임시 파일 생성이 필요하지 않습니다.
  • 파일 감지 이벤트 리스너에 의존하지 않고 다운로드 준비가 가능합니다.
  • 될 수 있습니다. 특정 토큰 이름 및 쿠키 설정에 맞게 사용자 정의됩니다.

위 내용은 브라우저 이벤트 없이 브라우저 파일 다운로드 완료를 어떻게 안정적으로 감지할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.