JavaScriptでファイルのサイズを得るには

[上に] [前に] [次に]
まる高 1999/10/28(木) 20:11:07
写真(画像)アルバム集を作成しています。
画像のサイズを32Kバイト以下の制限を加えたいのです。現状、アッ
プロード後、CGIプログラムで画像ファイルサイズを得て、32Kバ
イト以上である時、unlinkをかけています。
この方法では、巨大なファイルをアップロードされた時、限られたディ
スクエリアがフルになってしまう恐れがあります。
画像ファイルをアップロードする前に、JavaScriptでそのファイルサイズを
取り込む方法をどなたか、教えてください。

ふじ 1999/10/28(木) 21:30:34
#JavaScriptでファイルサイズを得る方法は分かりませんが。

私ならデータをデコードする前に、環境変数の CONTENT_LENGTH
を見て、サイズが大きかったら処理しないでエラーを出すように
作ります。
#マルチパートのヘッダとか、他のデータもくっついて来るので
#画像のサイズを厳密に処理することは出来ませんが。

まる高 1999/10/29(金) 09:10:41
ふじさん、御回答ありがとうございます。

環境変数CONTENT_LENGTHを参照できる時(かつread()を実行していな
い時)、エンコードされている送信データは、WWWブラウザ側のPCに
存在していると考えてよろしいですか。
そうであるならば、送信ファイルの大きさをある程度予測できますね。
予想ファイルサイズ=CONTENT_LENGTH/5 でいいですかね?

ふじさんの方法でやってみようかな。他の方でアイデアがあればお願い
いたします。

ふじ 1999/10/29(金) 15:24:36
>エンコードされている送信データは、WWWブラウザ側のPCに
>存在していると考えてよろしいですか。
あくまで想像ですが・・・

ブラウザが Content-Length ヘッダを付けてサーバに送信。

サーバはそのヘッダを見て環境変数 CONTENT_LENGTH をセットして
CGIのプロセスを起動。送られてきたデータをCGIに送りはじめる。

CGIで環境変数を見て処理するかどうか決める。

という流れだとしますと、送信データは
・通信経路の途中
・サーバ機のメモリ上(httpd?)
・サーバ機のテンポラリファイル
辺りにあるのかなあ・・・
#数10MBのファイルを送っても、特に httpd のプロセスのメモリ
#使用量が増えた様子はないので、httpd はテンポラリに書き出しているのかも。

>予想ファイルサイズ=CONTENT_LENGTH/5 でいいですかね?
ファイルが5つ同時に送られて来るのですか?

<FORM ENCTYPE="multipart/form-data">
で送られて来る場合のデータは、

-----------------------------26029295725112
Content-Disposition: form-data; name="AAA"; filename="hogehoge.gif"
Content-Type: image/gif

(GIFのバイナリ)

-----------------------------26029295725112
Content-Disposition: form-data; name="AAA"; filename="hogehoge.jpg"
Content-Type: image/jpeg

(JPEGのバイナリ)

-----------------------------26029295725112--

の様になっているので、
ファイルサイズ = CONTENT_LENGHT - マルチパートのヘッダ部分
となります。

まる高 1999/10/29(金) 22:33:38
>ファイルサイズ = CONTENT_LENGHT - マルチパートのヘッダ部分
>となります。

ついぞ、エンコードされると%nnになるので、万が一漢字含みの場合を
想定して%nnnnになるケースを考え、CONTENT_LENGTH/5かなと思いました。
認識の誤りでした。勉強になります。

まる高 [HomePage] 1999/11/01(月) 09:47:35
[[解決]]
ふじさん、ありがとうございました。
ちなみに、小生のHPの『まる高マラソン大会』の写走館(アルバム)
のページを生成するCGIプログラムに導入させて頂きました。

[上に] [前に] [次に]