- PR -

struts開発における、ActiveXからのファイル添付について

投稿者投稿内容
未記入
会議室デビュー日: 2005/10/31
投稿数: 6
投稿日時: 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();
-------------------------------------------------------------------------------
としてみましたが、取得できませんでした。

よい方法をご存知の方いらっしゃらないでしょうか?
以上、宜しくお願いいたします。



uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2005-10-31 16:17
ActiveXを何に利用しているのですか? ActiveXを使ってファイルアップロードするのに
わざわざHTMLフォームと同様の仕組みにする理由がわからないのですが。もしやるとすると、
ActiveXでブラウザと同様のHTTPリクエストを作成すればいいのですが、それはできている
のですか?
未記入
会議室デビュー日: 2005/10/31
投稿数: 6
投稿日時: 2005-10-31 16:37
ファイルアップロードをしています。
ActiveXで添付する画面を表示し、その情報をActionクラスで
マルチパートデータとしてうけとり、そのデータをDBに登録する仕様になっています。
ActiveXからActionクラスがPOSTで呼ばれた際、
マルチパートデータがFormFileオブジェクトを保持できませんよね?
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2005-10-31 16:59
引用:

未記入さんの書き込み (2005-10-31 16:37) より:
ActiveXからActionクラスがPOSTで呼ばれた際、
マルチパートデータがFormFileオブジェクトを保持できませんよね?


ActiceXからActionクラスを呼び出す部分をどのように実装しているのですか?
FormFileクラスは、マルチパートリクエストを解釈するように作られているので、マルチ
パートリクエストを送らなければいけません。前の書き込みにも書いたとおり、ブラウザが
送るのと同じリクエストを送ればいいわけです。
未記入
会議室デビュー日: 2005/10/31
投稿数: 6
投稿日時: 2005-10-31 17:21
なかなか理解できず申し訳ありません。
windowsのファイル追加を行い、
<html:file />タグのデータをFormでFormFileにStrutsが格納してくれる、
という動きがActiveXからActionクラスが呼ばれた際も、行いたいのです。
ActiveX側の処理は別の人間の担当なのでわからないのですが、
ActiveXを使用しない場合のマルチパートデータの形式と同じものを
Requestに書いてもらうようにしています。
そのデータをRequest(HttpServletRequest)から取得し、
FormFile形式にするにはどうしたらよいのでしょうか?
呼ばれたActionクラスのexecuteにきた時点で、
実はStrutsでどこかにデータを格納していたりするのでしょうか?

FormFileオブジェクトでなくても、
それと似た機能のオブジェクトであればよいのですが。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2005-10-31 17:28
引用:

未記入さんの書き込み (2005-10-31 17:21) より:
なかなか理解できず申し訳ありません。
windowsのファイル追加を行い、
<html:file />タグのデータをFormでFormFileにStrutsが格納してくれる、
という動きがActiveXからActionクラスが呼ばれた際も、行いたいのです。
ActiveX側の処理は別の人間の担当なのでわからないのですが、
ActiveXを使用しない場合のマルチパートデータの形式と同じものを
Requestに書いてもらうようにしています。


これができているのであれば、

引用:

そのデータをRequest(HttpServletRequest)から取得し、
FormFile形式にするにはどうしたらよいのでしょうか?


特に何もしなくてもこれはできるはずです。サーバサイドのプログラムは、HTTPリクエストが
どこから送られてこようが、同じリクエストなら同じように動きます。まずはActiveX側から
本当に妥当なリクエストが送られているのかどうか確認して下さい。

引用:

呼ばれたActionクラスのexecuteにきた時点で、
実はStrutsでどこかにデータを格納していたりするのでしょうか?


はい、その通りです。というか、そのように設定されていなければなりません。
Strutsを使って開発するのであれば、Strutsをきちんと理解したほうがよいと思います。
未記入
会議室デビュー日: 2005/10/31
投稿数: 6
投稿日時: 2005-10-31 17:45
Strutsの勉強不足ですみません。

つまり、自身のActionクラスで
HttpServletRequestからまた
CommonsMultipartRequestHandlerクラスやDiskFileUploadクラスを使って、
マルチパートを解析させるのではないということですね。

どのクラスに格納しているのかご存知でしょうか?
uploadパッケージ内のクラスでしょうか?
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2005-10-31 18:39
まず、ブラウザからのアップロードはできているのですよね。であれば、後はActiveX側の問題
です。「ActiveXを使用する場合は、POSTでActionクラスが直接呼ばれ、」というのが気に
なるのですが、これは単にブラウザを介さない、という意味ですか?

何度もいうようですが、ブラウザからアップロードができているのであれば、サーバ側には
問題ありません。もしかしてブラウザから呼び出される部分とActiveXから呼び出される部分
を別々に作っているのですか?

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