使用Servlet实现浏览器从服务器下载文件,并包含处理中文文件名的乱码问题
文件在Web过程中的位置信息:
Servlet实现下载文件的代码:
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException
{
//获取下载的文件在服务上的路径
String path = this.getServletContext().getRealPath(
"/download/测试中文下载.png");
//获取下载的文件名
String fileName = path.substring(path.lastIndexOf("\\") + 1);
//设置浏览器以下载的方式打开数据
response.setHeader("content-disposition", "attachment;filename="
+ URLEncoder.encode(fileName, "UTF-8")); //注意:含有中文的文件名 需要给URL编码
//读取图片数据并响应给客户端
OutputStream out = response.getOutputStream();
InputStream in = null;
try
{
in = new FileInputStream(path);
byte[] buff = new byte[1024];
int len = 0;
while((len = in.read(buff)) > 0)
{
out.write(buff, 0, len);
}
}
catch (Exception e)
{
e.printStackTrace();
}
//由于response对象由web服务器创建,在本次请求结束后服务器会自动销毁该对象 所以不需要手动管理out流
if(in != null)
{
in.close();
}
}