私はこれをしているファイルサイズを取得したい:
my $filename=$query->param("upload_file");
my $filesize = (-s $filename);
print "Size: $filesize ";`
しかし、それは機能していません。ファイルをアップロードしなかったことに注意してください。アップロードする前にサイズを確認したいのですが。したがって、最大1MBに制限します。
アップロードする前に何かのサイズを知ることはできません。ただしContent-Length
、ブラウザから送信されたリクエスト ヘッダーがある場合は、それを確認できます。次に、それを信じるかどうかを決めることができます。Content-Length
は、ファイルのアップロード自体だけでなく、他のフォーム フィールドを含むリクエスト ストリーム全体の長さになることに注意してください。しかし、準拠しているクライアントの概算値を取得するには十分です。
プレーンな CGI で実行しているように見えるので、リクエストの本文の長さを で取得できるはずです$ENV{CONTENT_LENGTH}
。
また、( perldoc CGIから) post max が既に設定されている可能性があるため、サニティ チェックを行いたい:
$CGI::POST_MAX
負でない整数に設定すると、この変数は POSTing のサイズ (バイト単位) に上限を設定します。CGI.pm が上限を超える POST を検出した場合、CGI.pm はすぐにエラー メッセージを表示して終了します。この値は、通常の POST とマルチパート POST の両方に影響します。つまり、ファイル アップロードの最大サイズも制限されます。これは、1 メガバイトなどの適度に高い値に設定する必要があります。
アップロードされたファイルは、フォームが送信されるとサーバー上の tmp の場所に格納されます。そこでファイル サイズを確認してください。
$field の値を指定します。
my $upload_filehandle = $query->upload($field);
my $tmpfilename = $query->tmpFileName($upload_filehandle);
my $file_size = (-s $tmpfilename);
これはPerlとは何の関係もありません。
サーバー上のファイルを読み取るコマンドを使用して、ユーザーのコンピューター上のファイルのファイルサイズを読み取ろうとしていますが、Perlを使用して実行することはできません。
これはブラウザで実行する必要があることであり、これらの質問を簡単に見ると、非常に難しいか不可能です。
最善の策は、ファイルが大きすぎる場合にユーザーがアップロードを開始して中止できるようにすることです。
返信ありがとうございます。以前は機能していなかった理由がわかりまし$filesize = (-s $filename);
た.Ajaxリクエストの送信中にファイルサイズをチェックしていたため、ページの再送信中ではありませんでした.そのため、サイズをゼロにしていたのです. ページを送信するように修正したところ、機能しました。ありがとう。
リクエストを処理する前に確認したい場合は、リクエストをトリガーする Web ページを確認することをお勧めします。Web ブラウザーだけでできるとは思いませんが、Flash が気にならないのであれば、サイズ (およびファイルの種類) などをチェックしてアップロードを防止できる多くの Flash アップロード ツールがあります。
手始めに良いのはYUI Uploaderです。ここにもっとたくさん:最高の複数ファイルJavaScript / Flashファイルアップローダーは何ですか?
サーバー側でもチェックしたいのは明らかですが、ユーザーがサーバーにリクエストを送信し始める頃には、すでに CPU サイクルと帯域幅を使い果たしています。
この投稿を読むだけですが、コンテンツの長さをチェックすることはおおよその事前チェックですが、ファイルを一時フォルダーに保存してから、あらゆる種類のチェックを実行することもできます。基準を満たさない場合は、削除して、最終的な宛先に送信しないでください。
file stats -X --perldoc.perl.orgおよびstat-perldoc.perl.orgについては、perlのドキュメントを参照してください。また、あなたがやろうとしているのと同じようなことをしているこのアップロードスクリプトを見ることができます。