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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/05/26 17:13
- Visual Basic(VBA) 【マクロ】フォルダにファイルが1つも無い時に、ファイルがありませんとメッセージを表示する 4 2022/08/28 08:48
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのマクロについて教え...
-
現在のブックを閉じないで、マ...
-
Gitについて質問。 クローンし...
-
マインクラフトPCをプレイしよ...
-
ファイルサーバ上のファイルが...
-
エクセル 同じデータなのに違う...
-
LAN接続HDD(LinkStation)で削...
-
Excel VBAで値コピーが使用でき...
-
VBAで別エクセルファイルから指...
-
内蔵HDD同士の転送速度について。
-
バッチでサブフォルダ内のファ...
-
VBScript フォルダ以下からフ...
-
vb2008 フォームのコピー方法を...
-
ファイルをコピーできない
-
エクセルVBAでファイル・シート...
-
エクセル ファイルをコピー出...
-
エクセルVBAで開いているファイ...
-
PDFファイルをWORDに
-
ホームページ内の文字や写真を...
-
既存のExcelファイルをコピーし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで複数のコメントのサ...
-
エクセルのハイパーリンクがコ...
-
バッチファイル XCOPYで上書き...
-
バッチファイル 別ファイルにリ...
-
frxファイルの役目
-
ファイルサーバ上のファイルが...
-
バッチファイルのコピーで
-
Vba初心者です。下記のコード助...
-
xcopyでのバッチコピー方法でコ...
-
同じファイル名 上書きしないフ...
-
エクセルVBAで開いているファイ...
-
エクセル2010、図が大きすぎま...
-
vbsでExcelのシートをコピーす...
-
アクセス クエリを別のファイ...
-
bat 同名ファイルコピー時にリ...
-
[エクセル]コピーするとオブジ...
-
ワード 一部のページだけをpdf...
-
パワポでスライドをコピーでき...
-
FSO.CopyFileでのエラー無視方法
-
VBSで作成したフォルダにファイ...
おすすめ情報