サーバー上に、ダウンロードするファイルとしてユーザーに送信するコンテンツを生成するスクリプトがあります。問題は、コンテンツが少し長い場合があることと、ダウンロードの途中で通信が途切れることがあることです。そのような場合、ダウンロードは単に停止し、それまでに送信されたコンテンツは保存されます。ファイルが完全にダウンロードされていないことをユーザーに通知して再試行することができれば、これはそれほど悪いことではありません。しかし、通常、ユーザー側には何の問題もないように見えます。ブラウザは単に「ダウンロードが完了しました」と通知するだけです。その後、ユーザーは問題が発生し、ファイルの一部が欠落していることに気付きますが、後で実際にファイルを開いて操作しようとすると (遅すぎます)。
では、ダウンロードが完了していない場合にブラウザーにエラーを表示させるために、ブラウザーによってダウンロードされるファイルを送信するサーバー側スクリプトの方法はありますか?
ところで、ファイルを送信するために、次の 3 つの HTTP ヘッダーを使用します。
Content-Type: application/octet-stream
Content-Disposition: attachment; filename="MyFile.ext"
Content-Length: <no. of bytes>
実際には、コンテンツの長さを事前に知ることができます。ブラウザは、ダウンロードについてユーザーに通知するときに、実際にこの番号をユーザーに表示します。しかし、正しいバイト数がダウンロードされる前にダウンロードが終了しても、ブラウザは何も言わず、ユーザーがダウンロードしたファイルの正確なサイズを確認して、ブラウザが発表したものと比較することは期待できません。前。
そのような場合にブラウザーにエラーを通知させるブラウザー構成はおそらくありますか? または、送信できる別の HTTP ヘッダー (おそらくチェックサムや CRC などを使用して) があり、目的の効果がありますか?
どんな助けでも大歓迎です!
編集:小さすぎるダウンロードでブラウザの動作をテストするための単純な PHP コードは次のとおりです。
<?php
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="test.txt"');
header('Content-Length: 300');
echo 'Will there be a warning?';
このコードは、test.txt
300 バイト長とされる名前のファイルをブラウザに送信してダウンロードします。実際、コンテンツははるかに小さいです。ブラウザはコンテンツが増えるのを少し待ってから、断念して「ダウンロードが完了しました」と通知しますが、警告はありません。