- - PR -
struts開発における、ActiveXからのファイル添付について
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-10-31 15:52
はじめて質問させていただきます。
現在、Struts1.2.7で開発をしています。 ファイルのアップロード処理で、ActiveXを使用するタイプと、 使用せずにwindowsのファイル追加により自力でファイルを添付するタイプと 2パターン作成しています。 StrutsにはFormFileというクラスがあるため、 ActiveXを使用しない場合は、FormでFormFileにより アップロードファイル情報を取得しています。 ActiveXを使用する場合も、FormFileをうまく使い、 マルチパートデータを自力で解析せずにすむようにしたいと思っています。 しかし、その方法がわかりません。 ActiveXを使用する場合は、 POSTでActionクラスが直接呼ばれ、 マルチパートデータでファイル情報をリクエストから受け取る、という形になるのですが・・・。 org.apache.struts.uploadパッケージの CommonsMultipartRequestHandlerクラスを利用できないかと ------------------------------------------------------------------------------- CommonsMultipartRequestHandler comfile = new CommonsMultipartRequestHandler(); comfile.handleRequest(req); Hashtable table = comfile.getFileElements(); ------------------------------------------------------------------------------- としてみましたが、取得できませんでした。 よい方法をご存知の方いらっしゃらないでしょうか? 以上、宜しくお願いいたします。 | ||||||||||||
|
投稿日時: 2005-10-31 16:17
ActiveXを何に利用しているのですか? ActiveXを使ってファイルアップロードするのに
わざわざHTMLフォームと同様の仕組みにする理由がわからないのですが。もしやるとすると、 ActiveXでブラウザと同様のHTTPリクエストを作成すればいいのですが、それはできている のですか? | ||||||||||||
|
投稿日時: 2005-10-31 16:37
ファイルアップロードをしています。
ActiveXで添付する画面を表示し、その情報をActionクラスで マルチパートデータとしてうけとり、そのデータをDBに登録する仕様になっています。 ActiveXからActionクラスがPOSTで呼ばれた際、 マルチパートデータがFormFileオブジェクトを保持できませんよね? | ||||||||||||
|
投稿日時: 2005-10-31 16:59
ActiceXからActionクラスを呼び出す部分をどのように実装しているのですか? FormFileクラスは、マルチパートリクエストを解釈するように作られているので、マルチ パートリクエストを送らなければいけません。前の書き込みにも書いたとおり、ブラウザが 送るのと同じリクエストを送ればいいわけです。 | ||||||||||||
|
投稿日時: 2005-10-31 17:21
なかなか理解できず申し訳ありません。
windowsのファイル追加を行い、 <html:file />タグのデータをFormでFormFileにStrutsが格納してくれる、 という動きがActiveXからActionクラスが呼ばれた際も、行いたいのです。 ActiveX側の処理は別の人間の担当なのでわからないのですが、 ActiveXを使用しない場合のマルチパートデータの形式と同じものを Requestに書いてもらうようにしています。 そのデータをRequest(HttpServletRequest)から取得し、 FormFile形式にするにはどうしたらよいのでしょうか? 呼ばれたActionクラスのexecuteにきた時点で、 実はStrutsでどこかにデータを格納していたりするのでしょうか? FormFileオブジェクトでなくても、 それと似た機能のオブジェクトであればよいのですが。 | ||||||||||||
|
投稿日時: 2005-10-31 17:28
これができているのであれば、
特に何もしなくてもこれはできるはずです。サーバサイドのプログラムは、HTTPリクエストが どこから送られてこようが、同じリクエストなら同じように動きます。まずはActiveX側から 本当に妥当なリクエストが送られているのかどうか確認して下さい。
はい、その通りです。というか、そのように設定されていなければなりません。 Strutsを使って開発するのであれば、Strutsをきちんと理解したほうがよいと思います。 | ||||||||||||
|
投稿日時: 2005-10-31 17:45
Strutsの勉強不足ですみません。
つまり、自身のActionクラスで HttpServletRequestからまた CommonsMultipartRequestHandlerクラスやDiskFileUploadクラスを使って、 マルチパートを解析させるのではないということですね。 どのクラスに格納しているのかご存知でしょうか? uploadパッケージ内のクラスでしょうか? | ||||||||||||
|
投稿日時: 2005-10-31 18:39
まず、ブラウザからのアップロードはできているのですよね。であれば、後はActiveX側の問題
です。「ActiveXを使用する場合は、POSTでActionクラスが直接呼ばれ、」というのが気に なるのですが、これは単にブラウザを介さない、という意味ですか? 何度もいうようですが、ブラウザからアップロードができているのであれば、サーバ側には 問題ありません。もしかしてブラウザから呼び出される部分とActiveXから呼び出される部分 を別々に作っているのですか? |