- PR -

FileUploadについて

1
投稿者投稿内容
なお
常連さん
会議室デビュー日: 2004/02/17
投稿数: 29
投稿日時: 2004-02-29 21:25
いつもお世話になっております。たかと申します。
strutsのファイルアップロードに関して、ご質問があります。

現在、struts1.1にて、ファイルアップロードのアプリを作成しております。
アップロードする際、一度、全てのファイル情報をサーバー側に送信してから、
そのファイルが妥当であるか(サイズが、指定したMaxサイズを超えていないか,
ファイルサイズが0でないか等)のチェックを行っております。

この場合、
例えば、1Gのファイルといった大容量ファイルをアップロードしようとした場合、
1Gの情報を全てサーバーにアップしてから、チェックを行おうとするので、
サーバ側のメモリが足りなくなると、アップロード中にInternalServerErrorが発生します。

アップロード中にリアルタイムにファイル情報を取得して、
初期で指定したMaxサイズを超えた瞬間にアップロードを中止させる、
といった処理を行いたいものですが、何か良い解決法がありますでしょうか?
(こうする事で、1Gのファイルをアップロードしようとしても、
 指定したMaxサイズ以上のアップロード処理を行わずにすむはずです。)
matobaa
常連さん
会議室デビュー日: 2002/12/26
投稿数: 21
投稿日時: 2004-03-01 02:00
Strutsの機能で制御するのであれば、Controller 要素で maxFileSize を指定すればいいんじゃないでしょうか。
http://jakarta.apache.org/struts/userGuide/configuration.html

Webサーバによってはアップロードのサイズを指定できるものがあるので、そこでちょん切ってしまうという手もあります。たとえばApache+WebLogicでは、mod_wlの設定で MaxPostSizeを設定することが可能です。
http://edocs.bea.com/wls/docs81/plugins/plugin_params.html

サイズオーバーしたときのために「413 Request Entity Too Large」というHTTPステータスコードが用意されています。
ftp://ftp.rfc-editor.org/in-notes/rfc2616.txt

これをはじめ、エラーページやメッセージをきちんと返すように実装するのは、結構面倒かもしれません。ポータビリティを確保したいなら、アップロードを受け付けるサーブレットを書き下ろしてしまうのが一番簡単だったりするかも。

きちんと実現できたら、ここに書いてくれるとうれしいです。
なお
常連さん
会議室デビュー日: 2004/02/17
投稿数: 29
投稿日時: 2004-03-01 22:51
>Strutsの機能で制御するのであれば、Controller 要素で
>maxFileSize を指定すればいいんじゃないでしょうか。
ご回答、ありがとうございます。
とりあえず、上記方法を試させて頂きました。

ただ、この場合でも、一度、全てのファイル情報をサーバーに送ってから、
サイズチェック等を行っているみたいで、
Internal Server Error が、アップロード中に表示されました。

最大サイズさえ指定しておけば、そのサイズに達した段階で、すぐにエラー処理を行う、
といった方法は、やはり、自分で実装しないといけないんでしょうか。。。
この方法の方が、確実にサーバーへの負荷がかからないような気がするんですが・・・。
1

スキルアップ/キャリアアップ(JOB@IT)