文件下载时附件名乱码问题
文件下载过程中,会出现中文名乱码或者文档名称中含有空格的,需要处理下,否则要么乱码,要么空格变成了“+”号,有点头疼。
临时想到一种办法:
即:
//定义输出文件编码及类型和文件名
/**
* 查看附件
*/
public String view() {
try {
Attachment newAttach = attachService.getAttachment(attach.getId());
if (attach != null) {
try {
InputStream inStream = new FileInputStream(newAttach
.getFilePath());
this.getResponse().reset();
this.getResponse().setContentType("bin");
this.getResponse().addHeader(
"Content-Disposition",
"attachment; filename=\""
+ URLEncoder.encode(newAttach.getName(),
"UTF-8").replace("+", "%20") + "\"");
// 循环取出流中的数据
byte[] b = new byte[512];
int len;
this.getResponse().getOutputStream().flush();
while ((len = inStream.read(b)) > 0) {
this.getResponse().getOutputStream().write(b, 0, len);
}
inStream.close();
} catch (FileNotFoundException e) {
//e.printStackTrace();
this.sendMessage("error");
} catch (IOException e) {
this.sendMessage("error");
//e.printStackTrace();
}
}
} catch (DAOException e) {
e.printStackTrace();
this.addActionMessage(e.getMessage());
return ERROR;
}
return null;
}
这样,在UrlEncode 之后, 将 "+" 替换成 "%20",因为浏览器将%20转换为空格,这样又空格再转换回来,就不影响下载的文件名称了,呵呵!

浙公网安备 33010602011771号