在项目里面新建一个文件夹存放要下载的文件,然后再页面输入要下载的文件名称,进行下载。
如果不输入下载的名称直接下载,会提示下载的不是一个文件,如果下载的文件再目录里面不存在,就会提示下载的文件不存在。如果下载的时候出现乱码的问题,就去写一个设置字符编码的类,然后用字符编码的类去web.xml配置过滤器:
<filter>
<filter-name>SetCharacterEncodingFilter</filter-name>
<filter-class>com.xj.filter.SetCharacterEncodingFilter</filter-class>
<!—去写一个字符编码的类解决中文乱码问题 -->
<init-param>
<param-name>encoding</param-name><!-- 初始化配置 -->
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SetCharacterEncodingFilter</filter-name>
<url-pattern>/servlet/*</url-pattern><!-- 拦截所有的servlet -->
</filter-mapping>
下面请看下载的例子:
下面请看代码:
<form action="${ctx}/servlet/XiaZaiServlet" method="post" style="margin-left:35px; ">
<table>
<tr><td style="font-size:14px;">文件名称:</td>
<td><input type="text" name="fileName"/></td></tr>
<tr><td><button class="btn btn-info" type="submit">下载</button></td></tr>
</table>
</form>
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String fileName = request.getParameter("fileName");
// 获取要下载的文件绝对路径, getRealPath这个是在web项目中获取的绝对路径,
通过相对路径转换成绝对路径. 然后在xiazai的这个文件目录拼接传过来的文件名称
String fullFileName = getServletContext().getRealPath("/xiazai/" + fileName);
File file=new File(fullFileName);
if (file.exists()) {
//当确定了它是一个文件以后,就去下载
if (file.isFile()) {
// 设置文件的MIME类型,告诉浏览器要进行文件的输出,然后浏览器检测是这个类型的,然后就下载包
response.setContentType(getServletContext().getMimeType(fileName));
// 设置Content-Disposition 设置下载的文件名称,这个是指定下载的文件名称
这个名称可以随便给,也可以是上传的那个名称
response.setHeader("Content-Disposition", "attachment;filename="+fileName);
InputStream is=new FileInputStream(file);//输入流
OutputStream os=response.getOutputStream();//输出到response
//读取文件,把文件放到输出流
int len=0;
byte[] bs=new byte[1024];
while ((len=is.read(bs))!=-1) {
os.write(bs, 0, len);
}
os.close();
is.close();
}
else
{
request.setAttribute("strMsg", "下载的不是一个文件");
request.getRequestDispatcher("../index.jsp").forward(request, response);
}
} else {
request.setAttribute("strMsg", "下载的文件不存在");
request.getRequestDispatcher("../index.jsp").forward(request, response);
}
}
}
下载的结果如下: