中国の名前のファイルがダウンロード

<!DOCTYPE HTML > 
<HTML LANG = "EN" >
<HEAD>
<メタ文字コード= "UTF-8" >
<タイトル>下载页面</ TITLE>
</ HEAD>
<BODY>
< HREF = 「/ day15 / IMG /九尾の.jpg " >图片1 </a>のの
の<a href= "/day15/img/1.avi">视屏</a>の
<HR />
< HREF = " / day15 /するDownloadServlet?ファイル名=九尾の.jpg」>图片1 </a>のの
の<a href= "/day15/downloadServlet?filename=1.avi">画面</a>の</ BODY> </ HTML>




パッケージcom.hopetesting.web.utils 

輸入sun.misc.BASE64Encoder
輸入java.io.UnsupportedEncodingException
輸入java.net.URLEncoder


パブリッククラスDownLoadUtils {

公共の静的な文字列getFileName(文字列剤、文字列のファイル名)がスローにUnsupportedEncodingException {
IF(agent.contains("MSIE")){
// IE浏览器
名=のURLEncoder。エンコード(ファイル名"UTF-8")
ファイル名= filename.replace("+" "「);
} それ以外の場合(agent.contains("Firefoxの")){
//火狐浏览器
BASE64Encoder base64Encoder = 新しいBASE64Encoder();
ファイル名= "=?UTF-8?B?" + base64Encoder.encode(filename.getBytes("UTF-8"))+ "=?"
} 他{
//其它浏览器
名=のURLEncoder。エンコード(ファイル名"UTF-8")
}
ファイル名を返します
}
}



パッケージcom.hopetesting.web.download 

輸入com.hopetesting.web.utils.DownLoadUtils
輸入sun.management.Agent

インポートのjavax.servlet.ServletContext ;
輸入javax.servlet.ServletException ;
インポートのjavax.servlet.ServletOutputStream
輸入javax.servlet.annotation。WebServlet ;
輸入javax.servlet.http.HttpServlet
インポートのjavax.servlet.http.HttpServletRequest ;
インポートのjavax.servlet.http.HttpServletResponse ;
輸入java.io.FileInputStream ;
インポートにjava.io.IOException ;

/ **
* @author newcityman
* @Date 2019年9月2日- 0時05
* /
@WebServlet("/するDownloadServlet")
publicクラスするDownloadServlet HttpServletを{拡張
保護のボイドのdoPost(HttpServletRequestのリクエストを、HttpServletResponseの応答)はServletExceptionがスローは、IOException {
// 1、パラメータ取得要求を、ファイル名の
文字列のファイル名= request.getParameter(「ファイル名」);
// 2、メモリにロードされたバイトのファイル入力ストリームを使用して
// 2.1を検索するファイルのパス
= request.getServletContext()のServletContextのコンテキストを
文字列のrealpath = context.getRealPath ("/ IMG /" +ファイル名);
// 2.2は、関連付けられたバイトストリーム
FISはFileInputStreamを= 新しい新規のFileInputStreamを(実パス);
// 3は、最初の応答に応答して提供される
// 3.1型情報コンテンツ
文字列MIMEタイプ= context.getMimeType(ファイル名);
response.setHeader(「コンテンツタイプ」、MIMEタイプ);
// 3.2設定応答コンテンツ配置ヘッダ
//中国語文書処理化け
//ユーザエージェント要求ヘッダ取得
ストリング= request.getHeaderエージェント(「ユーザエージェント」)
ファイルのユーティリティクラス名使用//符号化方法
。ファイル名= DownLoadUtils getFileName(エージェント、ファイル名);
response.setHeader("コンテンツの廃棄" "添付ファイル、ファイル名=" +ファイル名);
// 4は、入力データストリームを出力ストリームに書き込まれる
ServletOutputStreamをresponse.getOutputStream SOS =();
int型LEN =0 ;
バイト[]バフ= 新しいバイト[ 1024 * 8]
一方、(!(LEN = fis.read(バフ))= - 1){
sos.write(バフ0 、LEN)
}
fis.close()
}

ボイド保護のdoGet(HttpServletRequestのリクエスト、HttpServletResponseの応答)はServletExceptionがスローは、IOException {
this.doPost(要求、応答)
}
}
 

おすすめ

転載: www.cnblogs.com/newcityboy/p/11444417.html