- PR -

クライアントの画像ファイルをサーバへ配置するには

投稿者投稿内容
hiro
常連さん
会議室デビュー日: 2005/03/10
投稿数: 32
投稿日時: 2005-08-11 15:51
HttpServletRequestのgetInputStreamメソッドは
リクエスト全体をストリームとして読み込みます。
APIDocumentには
引用:

このメソッドまたは getReader() のどちらかを、本体を読み取るために呼び出すことができますが、両方を呼び出すことはできません。


とあるので、1度読み込み処理した場合2度目は使えなくなると思います。

strutsを使っていると言うことなので、ActionServletがすでにRequestの処理をして
ActionFormにデータを格納しているはずです。

jakarta-commonsのFileUploadを調べてください。

ActionFormにFileUploadクラスを受け取るプロパティを設定すれば、
FileUploadのインスタンス経由でStreamを取得することができます。
n.w
大ベテラン
会議室デビュー日: 2003/07/15
投稿数: 126
お住まい・勤務地: 神奈川
投稿日時: 2005-08-11 17:22
hiroさんありがとうございます。
ActionFormへsetter/getter追加し、Actionクラスにて
fileCopyメソッドは改善の余地ありですが無事取得できました!

かなりドツボにはまっていたので、解決してテンション上がってます 笑


コード:
public ActionForward execute(ActionMapping mapping, ActionForm form,
		HttpServletRequest request, HttpServletResponse response) throws Exception {
	
	TestForm tform = (TestForm) form;
	FormFile file = tform.getFileName();
	
	System.out.println("file : " + "name=" + file.getFileName()
					              + ",size=" + file.getFileSize());	

	fileCopy(file.getInputStream());
}

public static void fileCopy(InputStream fr) {
	String outFile = "C:\\\\tmp\\\\chk2.gif";
	try{
	    int data;   
	    OutputStream fw = new BufferedOutputStream(new FileOutputStream(outFile));
		while((data=fr.read())!=-1){
			System.out.println("画像読込み");
	    	fw.write(data);
		}
		fw.close();
	}catch(IOException ex){
		System.out.println("入出力エラー!");
		ex.printStackTrace();
	}
}

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