","image":"http://www.luping.net/uploads/20241104/17307198076728b03faccae.jpg","datePublished":"2024-11-08T22:31:00+08:00","dateModified":"2024-11-08T22:31:00+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}
„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie kann ich die aktuelle Schreibgröße der hochgeladenen Datei auf dem Server in Echtzeit lesen und wiedergeben, ohne Server und Client zu blockieren?

Wie kann ich die aktuelle Schreibgröße der hochgeladenen Datei auf dem Server in Echtzeit lesen und wiedergeben, ohne Server und Client zu blockieren?

Veröffentlicht am 08.11.2024
Durchsuche:944

How to Read and Echo Currently Writing Size of Uploaded File in Server in Realtime Without Blocking Server and Client?

Wie lese und drucke ich die Größe einer hochgeladenen Datei, die auf der Serverseite in Echtzeit geschrieben wird, ohne den Server und den Client zu blockieren?

Lassen Sie uns dieses Problem näher erläutern:

Um den Fortschritt des Datei-Uploads in Echtzeit zu erhalten, legen wir ihn durch Abruf vom Blob-, File-, TypedArray- oder ArrayBuffer-Objekt fest () in der POST-Anfrage Das Body-Objekt.

Die aktuelle Implementierung legt das File-Objekt als zweites Argument für fetch() fest, das an das Body-Objekt übergeben wird.

Anforderungen:

als Text-/Ereignisstrom liest die Größe der Datei, die in das Dateisystem des Servers geschrieben wird, und gibt sie an den Client zurück. Stoppt, wenn alle vom var-Abfragezeichenfolgenparameter in der GET-Anfrage bereitgestellten Bytes geschrieben wurden. Das Lesen von Dateien erfolgt derzeit in einer separaten Skriptumgebung, in der GET-Aufrufe an das Skript erfolgen, das die Datei liest, und anschließend POST an das Skript, das die Datei auf den Server schreibt.

Warten Sie, bis Sie den Abschnitt zum Echo der Dateigröße abgeschlossen haben, bevor Sie versuchen, potenzielle Probleme bei der Verarbeitung serverseitiger Dateischreibvorgänge oder Dateilesevorgänge zu beheben, um die aktuelle Dateigröße zu ermitteln.

Versuche derzeit, PHP zu verwenden, um die Anforderungen zu erfüllen. Aber auch an C, Bash, NodeJS, Python oder anderen Sprachen oder Methoden interessiert, die zur Ausführung derselben Aufgabe verwendet werden können.

Der clientseitige Javascript-Teil ist in Ordnung. Ich kenne mich mit PHP (einer der am weitesten verbreiteten serverseitigen Sprachen der Welt) einfach nicht gut aus, um das Muster zu implementieren, ohne unnötige Teile einzuschließen.

Motivation:

Fortschrittsanzeige für Abruf?

Verwandte Themen:

Fetch with ReadableStream

Problem:

Get

PHP Notice:  Undefined index: HTTP_LAST_EVENT_ID in stream.php on line 7

im Terminal.

Zusätzlich, wenn

while(file_exists($_GET["filename"]) 
  && filesize($_GET["filename"]) < intval($_GET["filesize"]))

wird ersetzt durch

while(true)

Es wird ein Fehler an der EventSource generiert.

Ohne den Aufruf von „sleep()“ wird die richtige Dateigröße an das Nachrichtenereignis für eine Datei mit einer Größe von 3,3 MB gesendet. 3321824, 61921, 26214 und 38093 werden jeweils gedruckt, wenn dieselbe Datei dreimal hochgeladen wird. Das erwartete Ergebnis besteht darin, die Dateigröße beim Schreiben einer Datei unter:

stream_copy_to_stream($input, $file);

anstelle der Dateigröße des hochgeladenen Dateiobjekts zu erhalten. Verhindern fopen() oder stream_copy_to_stream(), dass andere PHP-Prozesse auf stream.php zugreifen?

Bisher ausprobierte Dinge:

php Zitat aus

  • Jenseits von $_POST, $_GET und $_FILE: In JavaScriptPHP Processing Blob
  • Einführung in vom Server gesendete Ereignisse mit PHP-Beispiel

php

// 能否合并 `data.php`、`stream.php` 为同一个文件?
// 能否使用 `STREAM_NOTIFY_PROGRESS` 
// "Indicates current progress of the stream transfer 
// in bytes_transferred and possibly bytes_max as well" to read bytes?
// do we need to call `stream_set_blocking` to `false`
// data.php
// stream.php

javascript





Freigabeerklärung Dieser Artikel wird unter folgender Adresse abgedruckt: 1729432843 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3