HttpServlet实现文件的下载
首先是提供下载的输入框:
<body>
<form action="/TestPro/servlet/DownloadServlet" method="post">
输入下载的文件名:<input type="text" name="filename"/>
<input type="submit" value="下载" />
</form>
</body>
【注意】
上面<input>的name用于在ServletRequest中获得文本框的输入内容。
下面是DownloadServlet中的代码:
OutputStream out = response.getOutputStream();
String filename = request.getParameter("filename");
// 文本从Brower传递是被编码为IOS-8859-1,需要转换成utf-8
String filename_utf = new String(filename.getBytes("ISO-8859-1"),"utf-8");
if (filename_utf == null || filename_utf.equals(""))
{
out.write("请输入文件名!".getBytes("utf-8"));
response.setContentType("text/html;charset=utf-8");
out.close();
return;
}
// 获得服务器中文件的真实存储路径
String filePath = getServletContext().getRealPath("store/" + filename_utf);
int indexIndector = filename_utf.indexOf(".");
// 获得提取文件的文件后缀,包括.号
String indector = filename_utf.substring(indexIndector, filename_utf.length());
// 由文件的全路径获得要下载文件的InputStream
InputStream is = new FileInputStream(new File(filePath));
Date date = new Date();
long time = date.getTime();
// 设置响应头的MIME类型
response.setContentType("application/force-download");
response.setHeader("Content-Length",String.valueOf(is.available()));
response.setHeader("Content-Disposition", "attachment;filename=" + time + indector);
int i = 0;
byte[] b = new byte[1024];
while ((i = is.read(b)) != -1)
{
out.write(b, 0, i);
}
is.close();
out.close();
点击下载之后: