java 下载文件乱码解决
@Get(“/downLoadDemoFile1”)
public String downLoadDemoFile1(Invocation inv) {
String userAgent = inv.getRequest().getHeader(“User-Agent”);
String filename1 = “操作说明.pdf”;
//针对IE或者以IE为内核的浏览器:
if (userAgent.contains(“MSIE”)||userAgent.contains(“Trident”)) {
try {
filename1 = URLEncoder.encode(filename1, “UTF-8”);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
//非IE浏览器的处理:
try {
filename1 = new String(filename1.getBytes(“UTF-8″),”ISO-8859-1”);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
String filename = “dgsx.pdf”;
String path = Constants.DOWNLOAD_BASE_FOLD+”/demo/”+filename;
logger.info(path);
InputStream ins = null;
BufferedInputStream bins = null;
OutputStream outs = null;
BufferedOutputStream bouts = null;
try {
path = new String(path.getBytes(“ISO-8859-1”), “UTF-8”);
File file = new File(path);// 构造要下载的文件
if (file.exists()) {
// String suffix = path.substring(path.lastIndexOf(“.”) + 1);
ins = new FileInputStream(path);// 构造一个读取文件的IO流对象
bins = new BufferedInputStream(ins);// 放到缓冲流里面
outs = inv.getResponse().getOutputStream();// 获取文件输出IO流
bouts = new BufferedOutputStream(outs);
inv.getResponse().setContentType(“application/octet-stream;charset=utf-8”);// 设置response内容的类型
// inv.getResponse().setHeader(“Content-disposition”,”attachment;filename=\”” + URLEncoder.encode(“操作说明.pdf”, “UTF-8″)+”\””);// 设置头部信息
inv.getResponse().setHeader(“Content-disposition”, String.format(“attachment; filename=\”%s\””, filename1));
// inv.getResponse().setContentType(“application/vnd.ms-excel;charset=utf-8”);
inv.getResponse().setCharacterEncoding(“UTF-8”);
int bytesRead = 0;
byte[] buffer = new byte[8192];
// 开始向网络传输文件流
while ((bytesRead = bins.read(buffer, 0, 8192)) != -1) {
bouts.write(buffer, 0, bytesRead);
}
bouts.flush();// 这里一定要调用flush()方法
} else {
logger.info(“==============>>下载的文件不存在”);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (ins != null) {
ins.close();
ins = null;
}
if (bins != null) {
bins.close();
bins = null;
}
if (outs != null) {
outs.close();
outs = null;
}
if (bouts != null) {
bouts.close();
bouts = null;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return “@”;
}
原文地址: https://blog.csdn.net/qq_33212500/article/details/62226903
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
相关文章