
JSPとServletでクライアントPCにあるファイル(Excel、PDF等)をサーバにコピーするプログラムを作っています。
アプリケーションサーバ:SERVER1
ファイルサーバ :SERVER2
最終的には上記のようにしたいのですが、今はアプリケーションサーバ、ファイルサーバともSERVER1で開発しております。
下記のようなコーディングして、クライアントPCにあるファイル(FILE1)をSERVER1のフォルダにコピーしようとすると「(FILE1の)ファイルパスが見つかりません。」というエラーが出てしまいます。SERVER1にあるファイルをSERVER1にある別のフォルダにコピーすることはできます。
クライアントPCのファイルをサーバへコピーするには何か設定が必要でしょうか? それともコーディングが悪いのでしょうか?
ご存知の方、お知恵を貸してください。
宜しくお願い致します。
=============================================
public void copy(String src, String dest) throws IOException {
FileInputStream in = null;
FileOutputStream out = null;
try {
in = new FileInputStream(src);
out = new FileOutputStream(dest);
FileChannel cIn = in.getChannel();
FileChannel cOut = out.getChannel();
cIn.transferTo(0, cIn.size(), cOut);
}
finally {
try {
if(in != null) {
in.close();
}
}
catch(IOException e) {
}
try {
if(out != null) {
out.close();
}
}
catch(IOException e) {
}
}
}
以上、宜しくお願い致します。
No.1ベストアンサー
- 回答日時:
その copy メソッドって普通にローカルのファイルをコピーしようとしているだけですよね? クライアントマシンのファイルは共有されているんですか? (あるいはOSが共にUNIX系ならNFSマウントされている?)。
されていないのなら SERVER1 からは見えないのでコピーできなくて当然だと思いますが。あと Servlet を使うということは最終的にはクライアントのブラウザからの要求に従ってサーバ側にファイルを送るということだと思いますが、それなら普通にPOSTさせればいいんじゃないですか? (POSTされた後の Servlet での書き方の詳細は知りませんが、HTMLの form は <input type="file">)。
ありがとうございます。
いろいろ言葉が足りず、すみません。
OSはWindowsです。
本番機はWindows2005Server
開発機はWindows2000Server
です。
クライアントマシンはWindowsのさまざまなバージョンです。
ファイルは共有されていません。
あとパラメータはJSPで <input type="file">で入力し、SUBMITして(method="get")、Servletでrequest.getParameter("FILE1")
で取得しています。
やはりServletからローカルは見れませんか。
C:\FILE1とした場合、ServletはサーバのCドライブを探しに行くんでしょうか。
「普通にPOSTさせる」ということは結構単純な事なのでしょうか?
また調べてみます。
すもし気づきの事がございましたら、またご回答お願いします。
ありがとうございました。

No.2
- 回答日時:
サーブレットからは、クライアント側のハードディスクの中身は見えません。
クライアントからは単に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で検索すると以下のようなものがありました。参考まで。
参考URL:http://www.t3.rim.or.jp/~yoko-k-h/java/servlet/p …
この回答への補足
どうもありがとうございます。
お返事が遅れてすみませんでした。
FORMではenctype="multipart/form-data"を指定し、<input type=file>で送信してます。
しかし事情があり、POSTメソッドが使えないのです。
Servlet側でも request.getInputStream()が使えません。
何か他に良い手はございませんでしょうか?
何かアイディアがございましたらお教え下さい。
宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定のエクセルファイルが止ま...
-
ファイルをコピーできない
-
FTPとファイルコピーの違いにつ...
-
[エクセル]コピーするとオブジ...
-
バッチファイル XCOPYで上書き...
-
読み取り専用でファイルを開きたい
-
アクセス クエリを別のファイ...
-
frxファイルの役目
-
Vba初心者です。下記のコード助...
-
開いている別のファイルにExcel...
-
エクセルのハイパーリンクがコ...
-
エクセルで複数のコメントのサ...
-
ゴミ箱に移動するような削除を...
-
パワポでスライドをコピーでき...
-
エクセルの保護ビューについて
-
マインクラフトPCをプレイしよ...
-
エクセルのプロパティーでセキ...
-
エクセルvbaでdocuworksprinter...
-
Wordで差込印刷した後に別々の...
-
SaveAsの保存先について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで複数のコメントのサ...
-
frxファイルの役目
-
ファイルサーバ上のファイルが...
-
Vba初心者です。下記のコード助...
-
エクセルのハイパーリンクがコ...
-
同じファイル名 上書きしないフ...
-
xcopyでのバッチコピー方法でコ...
-
バッチファイル 別ファイルにリ...
-
[エクセル]コピーするとオブジ...
-
vbsでファイルやフォルダのコピ...
-
バッチファイルのコピーで
-
バッチファイル XCOPYで上書き...
-
現在のブックを閉じないで、マ...
-
bat 同名ファイルコピー時にリ...
-
エクセル2010、図が大きすぎま...
-
アクセス クエリを別のファイ...
-
ハイフネーションされている英...
-
特定のエクセルファイルが止ま...
-
マインクラフトPCをプレイしよ...
-
パワポでスライドをコピーでき...
おすすめ情報