応答ヘッダ:Content-Disposition 形式:Content-Disposition:attachment;filename=aaa.zip の役割:ブラウザに添付ファイルのダウンロード形式でデータを取得することを通知する要求:動的に閲覧に1枚の画像を出力するが、直接表示するのではなく、添付ファイルでをダウンロードする.
応答ヘッダを設定し、ブラウザに添付ファイルでダウンロード取得データを通知する.
response.setHeader("Content-Disposition","attachment; filename=3.jpg");//ファイル名が中国語以外の場合は何の問題もありません. response.setHeader("Content-Disposition","attachment;filename=自動車.jpg");//中国語であれば問題があります(応答ヘッダ伝達中国語はデフォルトでurl符号化されませんので、中国語を伝達できません.手動でurl符号化する必要があります(要求体と要求行、応答体はこれらが中国語データを伝達すると自動的にurl符号化されます)手動url符号化異なるブラウザ異なる ieブラウザによるurl符号化他のブラウザによるbase 64符号化固定コードセグメント(ダイレクトコピー可能) String fileName=" .jpg";
String ua = request.getHeader("User-Agent");
boolean IE_LT11 = ua.contains("MSIE"); // IE11
boolean IE11 = ua.contains("rv:11.0) like Gecko"); // IE11
boolean Edge = ua.contains("Edge"); // win10 Edge
// , UTF-8
if (IE_LT11 || IE11 || Edge) {
fileName = URLEncoder.encode(fileName, "UTF-8");
// java : ,java ,
// %20, + %20,
fileName = fileName.replace("+", "%20");
}
// Base64
else {
Base64.Encoder encoder = Base64.getEncoder();
fileName = encoder.encodeToString(fileName.getBytes("utf-8"));
// =?utf-8?B? ?= Base64
fileName = "=?utf-8?B?" + fileName + "?=";
}
response.setHeader("Content-Disposition","attachment; filename="+fileName);
ケース:@WebServlet(name = "ContentDispositionServlet", urlPatterns = "/ContentDispositionServlet")
public class ContentDispositionServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*
* :Content-Disposition
* :Content-Disposition: attachment; filename=aaa.zip
* :
* */
// : , ,
// ,
//response.setHeader("Content-Disposition","attachment; filename=3.jpg");//
//response.setHeader("Content-Disposition","attachment; filename= .jpg");//
// url , , url ( , url )
// url
// 1.ie url
// 2. base64
String fileName=" .jpg";
String ua = request.getHeader("User-Agent");
boolean IE_LT11 = ua.contains("MSIE"); // IE11
boolean IE11 = ua.contains("rv:11.0) like Gecko"); // IE11
boolean Edge = ua.contains("Edge"); // win10 Edge
// , UTF-8
if (IE_LT11 || IE11 || Edge) {
fileName = URLEncoder.encode(fileName, "UTF-8");
// java : ,java ,
// %20, + %20,
fileName = fileName.replace("+", "%20");
}
// Base64
else {
Base64.Encoder encoder = Base64.getEncoder();
fileName = encoder.encodeToString(fileName.getBytes("utf-8"));
// =?utf-8?B? ?= Base64
fileName = "=?utf-8?B?" + fileName + "?=";
}
response.setHeader("Content-Disposition","attachment; filename="+fileName);
String realPath = getServletContext().getRealPath("img/3.jpg");
System.out.println("realPath="+realPath);
InputStream inputStream = new FileInputStream(realPath);
byte[] bytes = new byte[1024];
int length=-1;
while((length=inputStream.read(bytes))!=-1){
//
response.getOutputStream().write(bytes,0,length);
}
//
inputStream.close();
}
}