- ベストアンサー
アップロードの完了前に容量を取得したいのですが・・・
Perlで簡易なアップロード掲示板を作成しています。 アップロードできるファイルの容量を制限したいのですが、アップロードデータを全てサーバ側で受け取ってからstatやlengthなどで容量オーバーかどうかを調べるのではなく、ユーザがアップロードを開始した時点で、Perl側でユーザがこれからアップロードしようとしているファイルの容量を取得する方法などはあるでしょうか? もしPerlだけでは不可能といったことであれば、代替方法の大枠でも教えていただければ幸いです。 よろしくお願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
javascript+ActiveXなら送信前にローカルでチェックすること自体は可能と思われますが、 サーバ側とユーザ側双方のセキュリティ的にはあまり好ましくないです サーバがApacheなら.htaccessでもいいので、LimitRequestBody を設定してはいかがでしょうか http://httpd.apache.org/docs/2.2/ja/mod/core.html#limitrequestbody レンタルサーバの場合は.htaccessが使えない場合もあります 使用可否についてはレンタルサーバ会社に問い合わせて下さい
その他の回答 (3)
- 神崎 渉瑠(@taloo)
- ベストアンサー率44% (1016/2280)
method="POST"で送信した場合、環境変数にContent-Lengthという項目が作られます。 Perlなら$ENV{'Content-Length'}です ただしファイルだけでなく名前とかメッセージ(があれば)や、それ以外の付加情報全てを含めたサイズになります。
お礼
ご回答有難うございます。 お礼遅くなってしまい申し訳ありません。 下にも書いたのですが、やりたいこととしては、「回線を通してサーバ側でデータを完全に受信しきる前に、容量オーバーのデータをアップしようとしている人の行為を未然に防ぐ」ということなのです。 質問本文ではその趣旨が伝わりにくかったかと思います。申し訳ありません。 未然に防ぐことが可能か不可能なのかも知りたかったものですから。。 ずうずうしいですが、もう少しだけご回答を期待しつつを質問を継続します。
>JavaScriptなんかでも代替 >>通常手段ではユーザ側のローカル資源にアクセスする方法が確立できない Javascriptだとユーザローカル資源にアクセスできない。可能なのはcookieだけ のハズ plugin系ならという意味だから可能性だけならFLASHも。 FLASHに関してはFLASHに詳しい人からの情報で補足して貰った方が良いかも
お礼
お礼遅くなってしまい申し訳ありません。 FLASHですか~なるほど少し調べてみたいと思います。 有難うございます。
通常手段ではユーザ側のローカル資源にアクセスする方法が確立できない。 javaアプレットでそのような例を見る事が有るからjavaならできるかもしれない。 <input type="file">ではなくアップローダを作成しそれを使わせるという意味
お礼
回答有難うございます。 やはりクライアント側で何らか処理をさせてやらなければいけないんですね。 JavaScriptなんかでも代替できないのかな、と疑問に思ったりしてます。
補足
漠然となんですけど、リクエスト時のパケットに全ファイル容量に関する情報があるのなら、それをサーバサイドで読んで―みたいなことを考えていたのですが、不可能なのでしょうか。。。 引き続きご回答頂ければ幸いです。
お礼
.htaccessでサイズの制限が掛けられるんですね! 知りませんでした。有難うございます。 あと、お礼遅くなってしまって申し訳ありません。 ただ、やりたい事としては回線の圧迫を抑えることで、例えば100Mの制限をサーバ側(.htaccessやCGI)で掛けたとしても、中には1GBのデータを無理やりUPしようとする人が居ると思うんです。仮にサーバ側で容量制限を掛けていたとしても、その人の無謀な試みによって回線はかなり圧迫されてしまいますよね? 最終的に「容量オーバーの為アップロードできません」のエラーを出力することはできると思うのですが、1GB挙げようとするその行為を、事前に食い止めたいのです。