1

ファイルを django にアップロードすると、最初に UploadHandlers を通過します。これを使用して進行状況バーを書きました。アップロードが完了すると、「ファイルのアップロード」ビューが呼び出されます。要求オブジェクトには、InMemoryUploadedFile またはディスク上の一時ファイルが含まれます。

これが私の質問です:ドキュメントは、ファイルをチャンクごとにコピーすることを提案しています。大きなファイルの場合、これには長い時間がかかりませんか (プログレス バーが 100% で動かなくなる)?

「移動」操作を行う方が良いのではないでしょうか? たとえば、Windows では、同じドライブ文字内でほぼ瞬時にファイルを移動できますが、コピーには時間がかかります。同じことがUNIXシステムにも当てはまると思います。

4

1 に答える 1

0

はい、同じことがUnixシステムにも当てはまります...「ドライブ文字」はより多くのパスであるため、/ opt / django/YourAppと/opt/ django/tmpUploadDirは実際には2つの異なるデバイスであることがわかります。

したがって、「移動」を信頼することは、概して、それだけの価値はありません。一方、クライアントが「100%完了」ダイアログを閉じた後、クライアントの表示プロセスの外部でコピーを行うことができます。

または、合計パーセンテージにコピー時間を考慮に入れることもできます。コピー速度が1Mb/秒であり、ネットワークのアップロード速度が100Kb/秒で進行していることを確認したとします。次に、1 GBのファイルの合計転送時間は1100秒(1000ではない)であり、「古い」パーセンテージがXであると計算されると、X * DiskSpeed /(DiskSpeed + NetworkSpeed)として表示できるようになります。 。ユーザーがファイルを100%アップロードすると、進行状況バーが91%で表示され、コピーも完了すると100%に達するまで増加します。

この最後の方法は、処理が単純なコピー以上のものである場合、たとえばffmpegを介してビデオを再コーディングする場合に有利に使用できます。ただし、事前に処理時間を正確に推測する必要があります。そうしないと、「アップロード」バーが作成され、単調ではありませんが(つまり、80%から79%になることはありません)、フィットが進みます。と開始します。

私の意見では、アップロード時間と比較して、コピー時間はごくわずかであり、無視しても問題ありません。そうでない場合は、2番目の異なるプログレスバーを表示して、ユーザーが「異常」と思われるものを何も表示しないようにすることができます。

于 2012-07-25T12:12:25.513 に答える