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

Susan Sarandon
Lepaskan: 2024-10-20 22:07:30
asal
427 orang telah melayarinya

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>
Salin selepas log masuk
  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>
Salin selepas log masuk

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>
Salin selepas log masuk
  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>
Salin selepas log masuk

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!

sumber:php
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!