Java文件路径及文件名乱码_javaweb文件下载及文件名中文乱码处理
版權聲明:yanghaha的原創博客 https://blog.csdn.net/qq_44758435/article/details/90636619
文件下載
需要先導入兩個jar包
commons-fileupload-1.3.1.jar
commons-io-2.4.jar
String fileName = request.getParameter("fileName");
//下載文件,需要設置兩個響應頭
//application/octet-stream任意文件類型
response.addHeader("content-Type", "application/octet-stream");
//對于不同瀏覽器進行處理
//根據請求頭user-agent
//attachment打開對話框下載 inline直接打開
String agent = request.getHeader("User-agent");
if(agent.indexOf("Firefox")!=-1) {
response.addHeader("content-Disposition", "attachment;fileName==?UTF-8?B?"+Base64.getEncoder().encodeToString(fileName.getBytes("utf-8"))+"?=");
}else if(agent.indexOf("Edge")!=-1) {
response.addHeader("content-Disposition", "attachment;fileName="+URLEncoder.encode(fileName, "utf-8"));
}
//servlet 通過文件路徑將文件轉換為輸入流 讀到servlet中
InputStream in = getServletContext().getResourceAsStream("/res/"+fileName);
//輸出流
ServletOutputStream out = response.getOutputStream();
byte[] bt = new byte[10];
int len = -1;
//將緩沖區的讀取bt
while((len=in.read(bt))!=-1) {
//將bt里的輸出到response
out.write(bt,0,len);
}
out.close();
in.close();
文件下載名中文亂碼問題
(1).edge
response.addHeader("content-Disposition", "attachment;fileName="+URLEncoder.encode(fileName, "utf-8"));
(2).火狐
response.addHeader("content-Disposition", "attachment;fileName==?UTF-8?B?"+Base64.getEncoder().encodeToString(fileName.getBytes("utf-8"))+"?=");
(3).綜合處理
String agent = request.getHeader("User-agent");
if(agent.indexOf("Firefox")!=-1) {
response.addHeader("content-Disposition", "attachment;fileName==?UTF-8?B?"+new String(Base64.encodeBase64(fileName.getBytes("utf-8")))+"?=");
}else if(agent.indexOf("Edge")!=-1) {
response.addHeader("content-Disposition", "attachment;fileName="+URLEncoder.encode(fileName, "utf-8"));
}
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Java文件路径及文件名乱码_javaweb文件下载及文件名中文乱码处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是面向对象_什么是面向对象?新手程序
- 下一篇: comparator 字符串比较大小_J