我们一般使用中文操作系统,所以要求的 文件名编码最好是utf-8,国际化一点
但是,似乎实际上不是这样。
为了解决这个问题,我们要在代码中加上一行代码,来保证代码内容显示正确。代码如下:
String fileName= new String(file.getName().getBytes(),"ISO8859-1");
以此对文件名的编码进行校正,下载的文件名乱码或者只有编号的问题就解决了。
//为浏览器提供下载功能的方法(不会直接从浏览器打开文件)
public void downLoadFile(){
try{
//通过jsp页面的参数获取需要下载的文件的id,通过id获取文件
String fileId = this.getRequest().getParameter("fileId").toString();
TzgSpzgInFile ltzgSpzgInFile= tzgSpzgInFileManager.getById(fileId);
//获取下载存放的路径
HttpServletResponse response=this.getResponse();
String realpath = ServletActionContext.getServletContext().getRealPath("/");
File file = new File(realpath+ltzgSpzgInFile.getFilepath());
// 以流的形式下载文件。
InputStream fis = new BufferedInputStream(new FileInputStream(file.getPath()));
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
// 清空response
response.reset();
OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
String fileName= new String(file.getName().getBytes(),"ISO8859-1");
//设置内容类型,设置http响应头,文件内容显示方式(支持ie下载图片和txt)
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
toClient.write(buffer);
toClient.flush();
toClient.close();
} catch (IOException ex) {
ex.printStackTrace();
} finally {
try {
} catch (Exception e) {
e.printStackTrace();
}
}
}