文件下载过程中,会出现中文名乱码或者文档名称中含有空格的,需要处理下,否则要么乱码,要么空格变成了“+”号,有点头疼。
临时想到一种办法:
即:
//定义输出文件编码及类型和文件名
/** * 查看附件 */ 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转换为空格,这样又空格再转换回来,就不影响下载的文件名称了,呵呵!