- - PR -
クライアントの画像ファイルをサーバへ配置するには
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-08-08 19:52
お世話になっています。
質問なんですが、クライアントから受取った画像情報( ファイルパス、ファイルそのものなど)からサーバ側の所定のフォルダへ 画像ファイルを配置(コピー?)したいのですが どのような方法があるのでしょうか? 現状 FileInputStreamを開きバイトでゴリゴリ読み込み、 それをOutputStreamへ書き込んで行くと考えいます。 (↓暫定としてこんな感じ?) FileInputStream fis = null; OutputStream out = null; try{ fis = new FileInputStream("ファイルパス"); byte[] buf = new byte[4*1024]; int bytesRead; while((bytesRead = fis.read(buf)) != -1) { out.write(buf, 0, bytesRead); } } finally{ if (fis != null) fis.close(); } 一般的な方法も含めて探しているのですが、探し方が下手なのか うまく見つけられていない状態です。 引き続き調査もしていますが、どなたか参考になるサイト、方法など ご存知でしたら教えていただけるとありがたいです。 環境 クライアント Curl(POSTで飛ばしたデータ(ファイル情報等)を Struts側で受けっています) サーバ WebSpere6 WAS VM 6.0 | ||||||||
|
投稿日時: 2005-08-08 20:18
サーバからクライアントのファイルの取得は基本的にできません。
ですので、クライアントからファイルの情報だけではなく、 ファイルの中身も送信しなければいけません。 #普通に考えて、サーバからクライアントの情報が暗黙的に取得できたら怖いと思われ。 | ||||||||
|
投稿日時: 2005-08-09 14:41
やはり画像自身を送らないと駄目なんですね。
と頭の片隅にはあったのですが、となるとはやり、受信した ファイル自身を開きコピって行くしかないみたいなんで、 そこらへんに的を絞って調べていきたいと思います。 回答ありがとうございました | ||||||||
|
投稿日時: 2005-08-10 13:14
すいません、また質問させてください。
まず、サーバ、クライアントを意識せず、画像ファイルをコピーする メソッドを作ってみたのですが、テキストファイルしかうまくコピーで きません。 以下メソッドを実行するとchk2.gifというファイルは作成され ファイルサイズも同じなんですが、開くと画像が壊れています。 画像ファイルの場合、特殊な方法が必要になってくるのでしょうか?
| ||||||||
|
投稿日時: 2005-08-10 13:29
こんにちは。
J2SE APIを参照すると、 http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/io/FileReader.html 『FileReader は、文字のストリームを読み込むときに使用します。生のバイトのストリームを読み込むときは、FileInputStream を使用してください。』 とあります。 また、 http://www.asahi-net.or.jp/~dp8t-asm/java/tips/BinaryFileIO.html この辺りを参照にしてみてはいかがでしょうか? 以上ご参考になれば。 | ||||||||
|
投稿日時: 2005-08-10 13:31
Reader出なくStreamで読み書きして下さい
| ||||||||
|
投稿日時: 2005-08-10 13:42
hiroさん、takashiさん、ありがとうございます!
無事コピーされ画像もきれいにコピれました。
| ||||||||
|
投稿日時: 2005-08-11 15:31
度々失礼します。 以前ローカル環境にてファイルコピーが
無事できたのですが、それをサーバ上で行おうとしていて 苦戦しています。 まず入力ファイルはjsp(動作確認の為Curlではない)にて
と記述し、参照ダイアログにて指定された画像ファイルを送信しています。 それをstruts、ActionクラスにてHttpServletRequestからStreamを取得してコピー処理を 行っているのが以下になります 現象としてはInputStreamのread時に戻り値が -1となってしまって 一度も読み込まれず終了してしまいます。 ご助力お願いします
※ @it内を検索していて気付いたのですがServletInputStreamからStreamを取得して コピーを行う場合Actionクラスではなく別クラスにし extends HttpServlet implements SingleThreadModel { をクラスに持たせないと実現できないのでしょうか? [ メッセージ編集済み 編集者: n.w 編集日時 2005-08-11 15:46 ] |