1.最も直接的かつ簡単な方法は、HTML ページ上のリンクにファイル アドレスを直接挿入することです。この欠点は、サーバー上のファイルのパスが公開され、ファイルのダウンロードに関する他の制御 (アクセス許可など) を実行できないことです。ここでは例は書きません。
2.サーバー側では、ファイルは出力ストリームに変換され、応答に書き込まれ、そのファイルは応答とともにブラウザーに取り込まれ、ブラウザーはファイルをローカルに保存するかどうかをユーザーに尋ねます。 (以下の例)
<%
応答.setContentType(fileminitype);
response.setHeader("場所",ファイル名);
response.setHeader("キャッシュ制御", "max-age=" + キャッシュタイム);
response.setHeader("Content-Disposition", "attachment; filename=" + filename) //ファイル名はエンコードされる必要があります (utf-8)。
応答.setContentLength(ファイル長);
OutputStream 出力ストリーム = 応答.getOutputStream();
入力ストリーム inputStream = 新しい FileInputStream(ファイルパス);
byte[] バッファ = 新しいバイト [1024];
int i = -1;
while ((i = inputStream.read(buffer)) != -1) {
OutputStream.write(buffer, 0, i);
}
出力ストリーム.flush();
出力ストリーム.close();
inputStream.close();
出力ストリーム = null
;
3. JSP なので、アプレットを使用してファイルをダウンロードする方法もあります。ただし、顧客はまずアプレット アプレットを信頼する必要があります。アプレット アプレットは、サーブレットによって送信されたデータ ストリームを受け入れ、それをローカルに書き込みます。
サーブレット側の例
public void service(HttpServletRequest req、HttpServletResponse res)
ServletException、IOExceptionをスローします{
res.setContentType(" text/plain ");
OutputStream 出力ストリーム = null;
試す {
出力ストリーム = res.getOutputStream();
PopFile(srcFile, OutputStream));//ファイル パス srcFile を持つファイルを OutputStream に書き込みます。
} キャッチ (IOException e) {
e.printStackTrace();
}
}
JApplet側の例
URL接続コン;
試す {
con = url.openConnection();//url は、呼び出される SERVLET の URL ( http://localhost:8080/sendDateSevlet.doなど)
con.setUseCaches(false);
con.setDoInput(true);
con.setDoOutput(true);
con.setRequestProperty("コンテンツタイプ",
"アプリケーション/オクテットストリーム");
入力ストリーム = con.getInputStream();
ProgressMonitorInputStream pmInputStream = new ProgressMonitorInputStream(
ペイン、「サーバーからのファイル コンテンツのダウンロード」、in);
ProgressMonitor pMonitor = pmInputStream
.getProgressMonitor();
pMonitor.setMillisToDecideToPopup(3);
pMonitor.setMillisToPopup(3);
String localfilepath = localstr + filename;//localfilepath ローカル パス、localstr ファイル フォルダー、filename ローカル ファイル名
if(saveFilsaveFilee(localfilepath,pmInputStream)){ //メソッド saveFilsaveFilee は、入力ストリーム pmInputStream をファイル localfilepath に書き込みます。
openLocalFile(ローカルファイルパス);
}
4.ちなみに、JAppletがファイルをアップロードするためのコードも掲載されています。
JApplet 側の
URLConnection コンテキストの例。
試す {
con = url.openConnection();//url は、呼び出される SERVLET の URL ( http://localhost:8080/sendDateSevlet.doなど)
con.setUseCaches(false);
con.setDoInput(true);
con.setDoOutput(true);
con.setRequestProperty("コンテンツタイプ",
"アプリケーション/オクテットストリーム");
OutputStream out = con.getOutputStream();
String localfilepath = localstr + filename //localfilepath ローカル パス、localstr ファイル フォルダー、filename ローカル ファイル名;
getOutputStream(localfilepath,out);//ファイル getOutputStream は、ファイル localfilepath を出力ストリーム out に書き込みます。
入力ストリーム = con.getInputStream();
true を返します。
}catch (IOException e) {
System.out.println("ファイルのアップロード エラー!");
e.printStackTrace();
サーブレット側のコード
例
public void service(HttpServletRequest req、HttpServletResponse res)
ServletException、IOExceptionをスローします{
res.setContentType(" text/plain ");
入力ストリーム入力ストリーム = null;
試す {
inputStream = res.getInputStream();
writefile(srcFile, inputStream);//入力ストリーム inputStream をファイル パス srcFile のファイルに保存します
} キャッチ (IOException e) {
e.printStackTrace();
}
} // サービス終了
概要: ファイル伝送ではストリームの形で存在し、ハードディスク上ではファイルの形で存在します。私たちがしなければならないことは、ストリームを送信し、HttpServletRequest と HttpServletResponse、または応答とリクエストを通じてストリームを読み取ることだけです。ファイルをストリームに変換する操作、またはストリームからファイルに変換する操作も同様です。