本文主要是介绍java从linux服务器下载中文名称的文件 出现乱码 下划线,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
java从服务器下载文件 在用响应流的方式返回给前端下载
但是中文名称的文件 在下载的时候会出现 下划线
用他们的new String(fileName.getBytes(), "ISO8859-1") 就变成乱码了
我用的是 URLEncoder.encode()完美解决乱码
String filename = file.getName();// 以流的形式下载文件。InputStream fis = null;try {response.reset();
// response.addHeader("Access-Control-Allow-Origin", "*");
// response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
// response.addHeader("Access-Control-Allow-Headers", "Content-Type");
// response.addHeader("Access-Control-Expose-Headers", "Content-Disposition");response.addHeader("Content-Length", "" + file.length());OutputStream toClient = new BufferedOutputStream(response.getOutputStream());response.setContentType("application/octet-stream");
// response.setCharacterEncoding("UTF-8");response.setContentType("application/msexcel");response.setContentType("application/vnd.ms-excel");response.addHeader("content-disposition", "attachment;filename=" +URLEncoder.encode(filename, "UTF-8"));response.setHeader("filename", filename);fis = new BufferedInputStream(new FileInputStream(destPath));byte[] buffer = new byte[fis.available()];fis.read(buffer);fis.close();toClient.write(buffer);toClient.flush();toClient.close();} catch (Exception e) {e.printStackTrace();}
如果要返回流给前端的
// response.addHeader("Access-Control-Allow-Origin", "*");
// response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
// response.addHeader("Access-Control-Allow-Headers", "Content-Type");
// response.addHeader("Access-Control-Expose-Headers", "Content-Disposition")必须要注释掉 不然会出现跨域的问题
注:不要在swaager进行调试下载 就算设置好了 在swagger返回的文件名 也是乱码
这篇关于java从linux服务器下载中文名称的文件 出现乱码 下划线的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!