Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Memantau dan Menggemakan Saiz Fail yang Dimuat Naik dalam Masa Nyata Semasa Mencegah Penyekatan Pelayan dan Pelanggan?

Bagaimana untuk Memantau dan Menggemakan Saiz Fail yang Dimuat Naik dalam Masa Nyata Semasa Mencegah Penyekatan Pelayan dan Pelanggan?

Susan Sarandon
Susan Sarandonasal
2024-10-20 22:07:30429semak imbas

How to Monitor and Echo File Size of Uploaded Files in Real Time While Preventing Server and Client Blocking?

Membaca dan Menggemakan Saiz Fail yang Dimuat Naik dalam Masa Nyata

Isu:

Bagaimana untuk membaca dan menggemakan saiz fail fail yang dimuat naik yang ditulis ke pelayan dalam masa nyata tanpa menyekat kedua-dua pelayan dan klien?

Penyelesaian:

Pelayan (cth., PHP):

  1. data.php: Kendalikan muat naik fail dan simpan ke sistem fail.
<code class="php"><?php
$filename = $_SERVER["HTTP_X_FILENAME"];
$input = fopen("php://input", "rb");
$file = fopen($filename, "wb");
stream_copy_to_stream($input, $file);
fclose($input);
fclose($file);
echo "upload of " . $filename . " successful";
?></code>
  1. stream.php: Pantau saiz fail dan gema kemas kini kepada klien melalui Acara Dihantar Pelayan (SSE).
<code class="php"><?php
header("Content-Type: text/event-stream");
header("Cache-Control: no-cache");
header("Connection: keep-alive");

$filename = $_GET["filename"];
$filesize = $_GET["filesize"];

clearstatcache(true, $filename);
$data = filesize($filename);
while ($data < $filesize) {
    sendMessage($data);
    clearstatcache(true, $filename);
    $data = filesize($filename);
    usleep(20000);
}

function sendMessage($data) {
    echo "data: $data\n\n";
    flush();
}
?></code>

Pelanggan (cth., JavaScript):

  1. Kendalikan Muat Naik Fail dan Kemajuan:
<code class="javascript">const handleFile = (event) => {
  const [file] = input.files;

  const headers = new Headers();
  headers.append("x-filename", file.name);

  const request = new Request("data.php", {
    method: "POST",
    headers: headers,
    body: file,
  });

  fetch(request);
  startSSE(file.name, file.size);
};</code>
  1. Memulakan SSE dan Kemajuan Kemas Kini:
<code class="javascript">function startSSE(filename, filesize) {
  const source = new EventSource(`stream.php?filename=${filename}&filesize=${filesize}`);

  source.addEventListener("message", (e) => {
    const data = parseInt(e.data);
    progress.value = data;
  });
}</code>

Pertimbangan Keselamatan:

  1. Laksanakan sanitasi dan pengesahan yang betul untuk mengelakkan kerentanan muat naik fail.
  2. Hadkan akses kepada fail atau maklumat sensitif.

Atas ialah kandungan terperinci Bagaimana untuk Memantau dan Menggemakan Saiz Fail yang Dimuat Naik dalam Masa Nyata Semasa Mencegah Penyekatan Pelayan dan Pelanggan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn