","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"}}
"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo leer y repetir el tamaño de escritura actual del archivo cargado en el servidor en tiempo real sin bloquear el servidor y el cliente?

¿Cómo leer y repetir el tamaño de escritura actual del archivo cargado en el servidor en tiempo real sin bloquear el servidor y el cliente?

Publicado el 2024-11-08
Navegar:587

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

¿Cómo leer e imprimir el tamaño de un archivo cargado que se escribe en el lado del servidor en tiempo real sin bloquear el servidor y el cliente?

Ampliemos este tema:

Para obtener el progreso de la carga del archivo en tiempo real, lo configuramos desde el objeto Blob, File, TypedArray o ArrayBuffer mediante fetch. () en la solicitud POST El objeto del cuerpo.

La implementación actual establece el objeto Archivo como el segundo argumento para fetch() pasado al objeto del cuerpo.

Requisitos:

como texto/flujo de eventos lee el tamaño del archivo que se escribe en el sistema de archivos del servidor y lo devuelve al cliente. Se detiene cuando se han escrito todos los bytes proporcionados por el parámetro de cadena de consulta var en la solicitud GET. La lectura de archivos actualmente ocurre en un entorno de secuencias de comandos separado, donde se realizan llamadas GET a la secuencia de comandos que lee el archivo y luego se realiza POST a la secuencia de comandos que escribe el archivo en el servidor.

Espere hasta completar la sección de eco del tamaño del archivo antes de intentar resolver posibles problemas con el manejo de escrituras o lecturas de archivos del lado del servidor para obtener el tamaño de archivo actual.

Actualmente estoy intentando utilizar php para cumplir con los requisitos. Pero también interesado en c, bash, nodejs, python u otros lenguajes o métodos que puedan usarse para realizar la misma tarea.

La parte de JavaScript del lado del cliente está bien. Simplemente no conozco bien PHP (uno de los lenguajes del lado del servidor más utilizados en el mundo) para implementar el patrón sin incluir partes innecesarias.

Motivación:

¿Indicador de progreso para la recuperación?

Relacionado:

Obtener con ReadableStream

Problema:

Obtener

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

en la terminal.

Además, si

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

se reemplaza con

while(true)

Generará un error en EventSource.

Sin la llamada sleep(), se envía el tamaño de archivo correcto al evento de mensaje para un archivo de tamaño 3,3 MB; 3321824, 61921, 26214 y 38093 se imprimen respectivamente cuando el mismo archivo se carga tres veces. El resultado esperado es obtener el tamaño del archivo al escribir un archivo en:

stream_copy_to_stream($input, $file);

en lugar del tamaño del archivo cargado. ¿fopen() o stream_copy_to_stream() impedirán que otros procesos php accedan a stream.php?

Cosas probadas hasta ahora:

php Cita de

  • Más allá de $_POST, $_GET y $_FILE: en JavaScriptPHP Processing Blob
  • Introducción a eventos enviados por el servidor con ejemplo de PHP

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





Declaración de liberación Este artículo se reimprime en: 1729432843 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3