后臺代碼
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.接收引數
String path = request.getParameter("filename");
System.out.println("path"+path);
if(path != null){
path = new String(path.getBytes("ISO-8859-1"),"UTF-8");
}
File file = new File(path);
//2.下載:設定兩個頭和一個流
// 獲得檔案名
String filename = file.getName();
System.out.println("filename1"+filename);
// 設定Content-Type
String type = getServletContext().getMimeType(filename);
response.setContentType(type);
// 判斷瀏覽器型別
String agent = request.getHeader("User-Agent");
if(agent.contains("Firefox")){
//Firefox使用base64編碼
filename = DownloadUtils.base64EncoderFileName(filename);
}else{
//IE或其他瀏覽器
filename = URLEncoder.encode(filename,"UTF-8");
filename = filename.replace("+", " ");
System.out.println("filename2"+filename);
}
// 設定Content-Disposition
response.setHeader("Content-Disposition", "attachment;filename="+filename);
// 設定一個代表檔案的輸入流
InputStream is = new FileInputStream(file);
OutputStream os = response.getOutputStream();
//3.兩個流對接
int len = 0;
byte[] b = new byte[1024];
while((len = is.read(b)) != -1){
os.write(b, 0, len);
}
is.close();
}
前端
<%
Queue<File> queue = new LinkedList<File>();
File root = new File("F://upload");
queue.offer(root);
while(!queue.isEmpty()){
File file = queue.poll();
File[] files = file.listFiles();
for (File f : files) {
if(f.isFile()){
%>
<h4><a href="https://bbs.csdn.net/topics/${ pageContext.request.contextPath }/DownloadListServlet?filename=<%= f.getCanonicalPath().replace("\\", "/") %>"><%= f.getName() %></a></h4>
<%
}else{
queue.offer(f);
}
}
}
%>
圖片名稱是:中文.jpg
此為控制臺列印
path:F:/upload/1/11/中文.jpg
filename1:1??.jpg
filename2:2%3F%3F.jpg
此為瀏覽器
http://localhost:8080/web_test5/DownloadListServlet?filename=F:/upload/1/11/中文.jpg
報錯
java.io.FileNotFoundException: F:\upload\1\11\??.jpg (檔案名、目錄名或卷標語法不正確。
嘗試過先解碼再編碼也不行,還是亂碼。下載英文檔案成功,中文檔案失敗。
求助大佬!!這個中文亂碼怎么解決
uj5u.com熱心網友回復:

求助大佬!!
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
不用判斷瀏覽器型別,直接拿這名代碼試試filename = agent.toLowerCase().indexOf("msie") == -1 ? new String(filename .getBytes("UTF-8"), "ISO8859-1") : URLEncoder.encode(filename , "UTF-8");
uj5u.com熱心網友回復:
還是不行,還是亂碼
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/118828.html
標籤:Java相關
下一篇:java
