Bagaimana untuk Membaca dan Gema Saiz Fail Fail yang Dimuat Naik dalam Masa Nyata?

Mary-Kate Olsen
Lepaskan: 2024-10-20 22:07:02
asal
686 orang telah melayarinya

How to Read and Echo File Size of Uploaded File in Real Time?

Baca dan Gemakan Saiz Fail yang Dimuat Naik Ditulis dalam Masa Nyata

Walaupun muat naik fail adalah tugas biasa, ia mungkin mencabar untuk memaparkan maklumat kemajuan tanpa menyekat kedua-dua pelayan dan pelanggan. Artikel ini membincangkan cara untuk mencapai matlamat ini menggunakan gabungan teknologi sisi pelayan dan sisi klien.

Latar Belakang

Pertimbangkan aplikasi di mana fail dimuat naik ke pelayan menggunakan fetch(), dengan badan ditetapkan kepada objek Blob, Fail, TypedArray atau ArrayBuffer. Matlamatnya adalah untuk membaca dan menggemakan saiz fail fail yang dimuat naik dalam masa nyata, supaya klien boleh memaparkan kemajuan semasa fail sedang ditulis pada pelayan.

Pelaksanaan Bahagian Pelayan (cth. , PHP)

Pelaksanaan bahagian pelayan melibatkan dua skrip: 'data.php' untuk menulis fail ke pelayan dan 'stream.php' untuk menstrim saiz fail kepada klien.

data.php:

<code class="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

stream.php:

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

while(true) {
    $upload = $_GET["filename"];
    $data = filesize($upload);
    if ($data) {
        sendMessage($lastId, $data);
        $lastId++;
    }
}

function sendMessage($id, $data) {
    echo "id: $id\n";
    echo "data: $data\n\n";
    ob_flush();
    flush();
}</code>
Salin selepas log masuk

Pelaksanaan Sebelah Pelanggan ( cth., JavaScript)

Pelaksanaan pihak klien menggunakan fetch() untuk memuat naik fail dan EventSource untuk menerima kemas kini saiz fail daripada pelayan.

<code class="javascript">const input = document.querySelector("input[type=file]");
const progress = document.querySelector("progress");
input.addEventListener("change", (event) => {
    const file = input.files[0];
    const request = new Request('data.php', {
        method: "POST",
        headers: { 'x-filename': file.name },
        body: file
    });
    const source = new EventSource('stream.php?filename=' + file.name);
    source.addEventListener("message", (e) => {
        progress.value = e.data;
    }, true);
});</code>
Salin selepas log masuk

Pertimbangan Tambahan

Untuk mengendalikan isu yang berpotensi dengan penulisan atau pembacaan fail, mekanisme pengendalian ralat boleh digabungkan. Selain itu, adalah penting untuk mengosongkan cache saiz fail untuk memastikan kemas kini saiz fail yang tepat.

Kesimpulan

Dengan mengikuti langkah ini, anda boleh mencapai bacaan saiz fail masa nyata dan bergema fail yang dimuat naik, tanpa menyekat pelayan atau klien. Ini membolehkan penjejakan kemajuan yang lancar untuk muat naik fail pada kedua-dua bahagian klien dan pelayan.

Atas ialah kandungan terperinci Bagaimana untuk Membaca dan Gema Saiz Fail Fail yang Dimuat Naik dalam Masa Nyata?. 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!