> 웹 프론트엔드 > JS 튜토리얼 > 일관된 '로드' 이벤트 없이 브라우저에서 파일 다운로드 완료를 안정적으로 감지하려면 어떻게 해야 합니까?

일관된 '로드' 이벤트 없이 브라우저에서 파일 다운로드 완료를 안정적으로 감지하려면 어떻게 해야 합니까?

DDD
풀어 주다: 2024-12-18 05:56:15
원래의
881명이 탐색했습니다.

How Can I Reliably Detect File Download Completion in a Browser without Consistent

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

사용자에게 피드백을 제공할 때 동적 파일 생성 및 다운로드가 어려울 수 있습니다. 이 기사에서는 서버가 요청에 대한 응답으로 파일을 생성하지만 브라우저가 다운로드 완료 시기를 명확하게 표시하지 않는 시나리오를 조사합니다.

문제: 이벤트 감지 제한

작성자는 파일이 동적으로 생성되고 숨겨진 iframe에 저장되는 시나리오에서 다운로드 완료를 감지하는 데 어려움을 겪었습니다. iframe의 "로드" 이벤트가 여러 브라우저에서 일관되게 트리거되지 않아 신뢰할 수 없는 표시기가 발생했습니다.

대체 솔루션: 클라이언트측 폴링

한 가지 솔루션에는 다음이 포함됩니다. JavaScript에서 클라이언트 측 폴링 메커니즘을 사용합니다. 알고리즘은 다음과 같이 작동합니다.

  • 고유한 토큰이 생성되어 다운로드 요청에 포함됩니다.
  • 브라우저에 "대기" 표시가 표시됩니다.
  • 타이머 정기적으로 "fileDownloadToken"이라는 이름의 쿠키를 확인하는 것이 시작됩니다.
  • 쿠키가 있고 토큰과 일치하는 경우 "대기 중" 표시가 숨겨져 있습니다.

서버측 응답

서버측 코드는 "fileDownloadToken"이라는 이름의 쿠키를 설정하여 응답합니다. 요청에 비어 있지 않은 토큰 값이 포함되어 있습니다. 이 쿠키는 다운로드가 완료되었음을 클라이언트측 코드에 알리는 역할을 합니다.

코드 구현

클라이언트측 JavaScript 예:

function blockResubmit() {
  // ...
  downloadTimer = window.setInterval(function() {
    var token = getCookie("fileDownloadToken");

    if (token == downloadToken || attempts == 0) {
      unblockSubmit();
    }

    attempts--;
  }, 1000);
}
로그인 후 복사

서버측 예시 PHP:

$TOKEN = "downloadToken";

// Sets a cookie so that when the download begins the browser can
// unblock the submit button.
$this->setCookieToken($TOKEN, $_GET[$TOKEN], false);

$result = $this->sendFile();
로그인 후 복사

이 접근 방식의 이점

  • 서버에서 임시 파일을 생성할 필요가 없습니다.
  • 호환 가능
  • 지정된 시간에 다운로드 완료를 감지하는 안정적인 방법을 제공합니다. 시나리오.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿