서버나 클라이언트를 차단하지 않고 파일 업로드 진행 상황을 실시간으로 모니터링하려면 어떻게 해야 합니까?

Barbara Streisand
풀어 주다: 2024-10-20 22:03:30
원래의
356명이 탐색했습니다.

How Can I Real-Time Monitor File Upload Progress Without Blocking the Server or Client?

서버나 클라이언트를 차단하지 않고 파일 업로드 진행 상황을 실시간으로 모니터링하는 방법은 무엇입니까?

배경:
파일 업로드가 발생하면 서버에 기록되는 파일의 진행 상황을 추적할 수 있습니다. 이는 서버나 클라이언트를 차단하지 않고 수행할 수 있으므로 원활하고 효율적인 사용자 경험이 가능합니다.

문제:
현재 구현에서는 파일 객체를 가져오기의 본문으로 설정합니다. 요구. 하지만 진행 상황을 실시간으로 모니터링하려면 다른 접근 방식이 필요합니다.

요구 사항:
서버에 기록되는 파일의 크기를 텍스트/이벤트로 표시합니다. -개울. 쿼리 문자열 매개변수로 제공된 모든 바이트가 기록될 때까지 프로세스가 계속되어야 합니다.

해결책:

PHP 구현:

<code class="php">// stream.php
header("Content-Type: text/event-stream");
header("Cache-Control: no-cache");
header("Connection: keep-alive");

$lastId = isset($_SERVER["HTTP_LAST_EVENT_ID"]) ? intval($_SERVER["HTTP_LAST_EVENT_ID"]) : 0;
$upload = $_GET["filename"];
$data = 0;
// Ignore file size if it's already there
$wasLess = $lastId != 0;
while ($data < $_GET["filesize"] || !$wasLess) {
    clearstatcache(true, $upload);
    $data = filesize($upload);
    $wasLess |= $data < $_GET["filesize"];
    if ($wasLess) {
        sendMessage($lastId, $data);
        $lastId++;
    }
    usleep(20000);
}

function sendMessage($id, $data)
{
    echo "id: $id\n";
    echo "data: $data\n\n";
    ob_flush();
}
로그인 후 복사

JavaScript 구현:

<code class="javascript">const [url, stream, header] = ["data.php", "stream.php", "x-filename"];

input.addEventListener("change", (event) => {
  const [file] = input.files;
  const [{ size: filesize, name: filename }, headers, params] = [file, new Headers(), new URLSearchParams()];

  headers.append(header, filename);
  progress.value = 0;
  progress.max = filesize;
  const [request, source] = [
    new Request(url, { method: "POST", headers, body: file }),
    new EventSource(`${stream}?${params.toString()}`)
  ];

  source.addEventListener("message", (e) => {
    progress.value = e.data;
    // Close the source when the data equals the filesize
    if (e.data == filesize) {
      source.close();
    }
  });
  fetch(request);
});</code>
로그인 후 복사

위 내용은 서버나 클라이언트를 차단하지 않고 파일 업로드 진행 상황을 실시간으로 모니터링하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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