文件下载可能会出现的几个问题
-
浏览器只根据相关内容类型展示,而不进行下载。
此时需要在响应头中设置Content-Disposition,attachment;filename=xxx.xxx;告诉浏览器接收到响应以后进行下载,如果没有这个响应头,浏览器只负责根据响应的内容进行展示。而不会进行下载。 -
附件名中若包含中文字符,则会出现乱码情况,此时需要将附件名按utf8编码,转为%xx%xx十六进制格式。
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext = getServletContext();
try {
//获取要下载的文件类型
String mimeType = servletContext.getMimeType("/file/index.jpg");
resp.setContentType(mimeType);
//说明下载的文件名
// String downloadFileName = "hello.jpg";
// 如果附件名中有中文,此时会乱码
String downloadFileName = "中国.jpg";
//此时需要将文件名进行url编码,
downloadFileName = URLEncoder.encode(downloadFileName, "utf8");
//下载附件
resp.setHeader("Content-Disposition","attachment;filename=" + downloadFileName);
InputStream is = servletContext.getResourceAsStream("/file/index.jpg");
IOUtils.copy(is,resp.getOutputStream());
}catch (Exception e){
e.printStackTrace();
}
}