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返回的文件名 也是乱码