","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"}}
"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como ler e ecoar o tamanho da gravação atual do arquivo carregado no servidor em tempo real sem bloquear o servidor e o cliente?

Como ler e ecoar o tamanho da gravação atual do arquivo carregado no servidor em tempo real sem bloquear o servidor e o cliente?

Publicado em 2024-11-08
Navegar:652

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

Como ler e imprimir o tamanho de um arquivo enviado sendo gravado no lado do servidor em tempo real sem bloquear o servidor e o cliente?

Vamos expandir este problema:

Para obter o progresso do upload do arquivo em tempo real, nós o configuramos a partir do objeto Blob, File, TypedArray ou ArrayBuffer por meio de fetch () na solicitação POST O objeto body.

A implementação atual define o objeto File como o segundo argumento para fetch() passado para o objeto body.

Requisitos:

como text/event-stream lê o tamanho do arquivo que está sendo gravado no sistema de arquivos do servidor e o ecoa de volta para o cliente. Pára quando todos os bytes fornecidos pelo parâmetro var query string na solicitação GET forem gravados. A leitura do arquivo atualmente acontece em um ambiente de script separado, onde chamadas GET são feitas para o script que lê o arquivo e, em seguida, POST é feito para o script que grava o arquivo no servidor.

Aguarde até concluir a seção de eco do tamanho do arquivo antes de tentar resolver possíveis problemas com o tratamento de gravações ou leituras de arquivos no lado do servidor para obter o tamanho atual do arquivo.

Atualmente tentando usar php para atender aos requisitos. Mas também interessado em c, bash, nodejs, python ou outras linguagens ou métodos que possam ser usados ​​para realizar a mesma tarefa.

A parte do javascript do lado do cliente está correta. Só não sou muito versado em php (uma das linguagens server-side mais usadas no mundo) para implementar o padrão sem incluir partes desnecessárias.

Motivação:

Indicador de progresso para busca?

Relacionado:

Fetch with ReadableStream

Problema:

Get

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

no terminal.

Além disso, se

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

é substituído por

while(true)

Irá gerar um erro no EventSource.

Sem a chamada sleep(), o tamanho correto do arquivo é enviado para o evento de mensagem para um arquivo de tamanho 3,3 MB, 3321824, 61921, 26214 e 38093 são impressos respectivamente quando o mesmo arquivo é carregado três vezes. O resultado esperado é obter o tamanho do arquivo ao gravar um arquivo em:

stream_copy_to_stream($input, $file);

em vez do tamanho do arquivo do objeto de arquivo carregado. Fopen() ou stream_copy_to_stream() impedirá que outros processos php acessem stream.php?

Coisas tentadas até agora:

php Citação de

  • Além de $_POST, $_GET e $_FILE: Em JavaScriptPHP Processing Blob
  • Introdução a eventos enviados pelo servidor com PHP Exemplo

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





Declaração de lançamento Este artigo foi reimpresso em: 1729432843 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3