- ベストアンサー
JSPとServletでサーバへのファイルコピー方法
- JSPとServletを使用して、クライアントPCにあるファイルをサーバにコピーする方法についての質問です。
- ファイルのパスが見つからないエラーが発生しています。
- 設定やコーディングに何か問題があるのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
その copy メソッドって普通にローカルのファイルをコピーしようとしているだけですよね? クライアントマシンのファイルは共有されているんですか? (あるいはOSが共にUNIX系ならNFSマウントされている?)。されていないのなら SERVER1 からは見えないのでコピーできなくて当然だと思いますが。 あと Servlet を使うということは最終的にはクライアントのブラウザからの要求に従ってサーバ側にファイルを送るということだと思いますが、それなら普通にPOSTさせればいいんじゃないですか? (POSTされた後の Servlet での書き方の詳細は知りませんが、HTMLの form は <input type="file">)。
その他の回答 (1)
サーブレットからは、クライアント側のハードディスクの中身は見えません。クライアントからは単にHTTP経由で問い合わせをしているだけでボリュームはマウントされていませんから。 サーブレットでクライアントとサーバの間でやりとりできるのは、HTTPを介したデータの送受だけです。従って、フォームにenctype="multipart/form-data"を指定し、<input type=file>でファイルを送信してやり、POSTされたデータを分析してそこからファイルのデータを抜き出し、それをバイナリファイルに保存することになります。 MIMEで送られたデータは、こんな形になっています。 ----------Boundary Content-Disposition form-data: name=??; filename=?? Content-Type: ?? ・・・データ・・・ ----------Boundary この前後のよけいな部分をカットし、肝心のデータだけをバイナリファイルで出力するわけです。 ServletInputStream in = request.getInputStream(); これでInputStreamは得られますから、そこから一度全部のデータを読み込んでどこかに保存するなりしておき、冒頭の3行と末尾の1行を取り除いてデータの部分だけを改めてファイルに保存します。基本的な考え方はこんな感じになると思います。 Googleで検索すると以下のようなものがありました。参考まで。
補足
どうもありがとうございます。 お返事が遅れてすみませんでした。 FORMではenctype="multipart/form-data"を指定し、<input type=file>で送信してます。 しかし事情があり、POSTメソッドが使えないのです。 Servlet側でも request.getInputStream()が使えません。 何か他に良い手はございませんでしょうか? 何かアイディアがございましたらお教え下さい。 宜しくお願い致します。
お礼
ありがとうございます。 いろいろ言葉が足りず、すみません。 OSはWindowsです。 本番機はWindows2005Server 開発機はWindows2000Server です。 クライアントマシンはWindowsのさまざまなバージョンです。 ファイルは共有されていません。 あとパラメータはJSPで <input type="file">で入力し、SUBMITして(method="get")、Servletでrequest.getParameter("FILE1") で取得しています。 やはりServletからローカルは見れませんか。 C:\FILE1とした場合、ServletはサーバのCドライブを探しに行くんでしょうか。 「普通にPOSTさせる」ということは結構単純な事なのでしょうか? また調べてみます。 すもし気づきの事がございましたら、またご回答お願いします。 ありがとうございました。