Java文件路径及文件名乱码_javaweb文件下载及文件名中文乱码处理
版權(quán)聲明:yanghaha的原創(chuàng)博客 https://blog.csdn.net/qq_44758435/article/details/90636619
文件下載
需要先導(dǎo)入兩個(gè)jar包
commons-fileupload-1.3.1.jar
commons-io-2.4.jar
String fileName = request.getParameter("fileName");
//下載文件,需要設(shè)置兩個(gè)響應(yīng)頭
//application/octet-stream任意文件類型
response.addHeader("content-Type", "application/octet-stream");
//對于不同瀏覽器進(jìn)行處理
//根據(jù)請求頭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 通過文件路徑將文件轉(zhuǎn)換為輸入流 讀到servlet中
InputStream in = getServletContext().getResourceAsStream("/res/"+fileName);
//輸出流
ServletOutputStream out = response.getOutputStream();
byte[] bt = new byte[10];
int len = -1;
//將緩沖區(qū)的讀取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"));
}
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的Java文件路径及文件名乱码_javaweb文件下载及文件名中文乱码处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是面向对象_什么是面向对象?新手程序
- 下一篇: comparator 字符串比较大小_J