Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Membaca dan Gema Saiz Fail Fail yang Dimuat Naik dalam Masa Nyata?

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

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-20 22:07:02687semak imbas

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>

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>

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>

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!

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