","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"}}
「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > サーバーとクライアントをブロックせずに、サーバーにアップロードされたファイルの現在書き込みサイズをリアルタイムで読み取り、エコーする方法は?

サーバーとクライアントをブロックせずに、サーバーにアップロードされたファイルの現在書き込みサイズをリアルタイムで読み取り、エコーする方法は?

2024 年 11 月 8 日に公開
ブラウズ:455

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

サーバーとクライアントをブロックせずに、サーバー側で書き込まれているアップロードされたファイルのサイズをリアルタイムで読み取り、出力するにはどうすればよいですか?

この問題についてさらに詳しく説明します:

ファイルのアップロードの進行状況をリアルタイムで取得するために、フェッチを通じて Blob、File、TypedArray、または ArrayBuffer オブジェクトから設定します。 POST リクエストの () 本文オブジェクト。

現在の実装では、body オブジェクトに渡される fetch() の 2 番目の引数として File オブジェクトが設定されます。

要件: text/event-stream としての

は、サーバーのファイル システムに書き込まれるファイルのサイズを読み取り、クライアントにエコー バックします。 GET リクエストの var クエリ文字列パラメータで指定されたすべてのバイトが書き込まれると停止します。現在、ファイルの読み取りは別のスクリプト環境で行われ、ファイルを読み取るスクリプトに対して GET 呼び出しが行われ、次にファイルをサーバーに書き込むスクリプトに対して POST が行われます。

現在のファイル サイズを取得するためのサーバー側のファイル書き込みまたはファイル読み取りの処理に関する潜在的な問題を解決する前に、ファイル サイズのエコー セクションが完了するまで待ってください。

現在、要件を満たすために php を使用しようとしています。しかし、C、bash、nodejs、Python、または同じタスクを実行するために使用できる他の言語やメソッドにも興味があります。

クライアント側の JavaScript 部分は問題ありません。私は、不必要な部分を含めずにパターンを実装するための php (世界で最も広く使用されているサーバーサイド言語の 1 つ) に精通していません。

動機:

フェッチの進行状況インジケーター?

関連:

ReadableStream によるフェッチ

問題:

Get

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

の HTTP_LAST_EVENT_ID。

さらに、 if

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

while(true)

EventSource でエラーが生成されます。

sleep() 呼び出しがない場合、サイズ 3.3MB のファイルのメッセージ イベントに正しいファイル サイズが送出され、同じファイルが 3 回アップロードされると、それぞれ 3321824、61921、26214、および 38093 が出力されます。期待される結果は、アップロードされたファイル オブジェクトのファイル サイズではなく、

stream_copy_to_stream($input, $file);

にファイルを書き込むときにファイル サイズを取得することです。 fopen() または stream_copy_to_stream() は、他の php プロセスが stream.php にアクセスするのを防ぎますか?

これまでに試したこと:

php

  • からの引用 $_POST、$_GET、$_FILE 以外: JavaScriptPHP 処理 Blob
  • 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





リリースステートメント この記事は次の場所に転載されています: 1729432843 権利侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3