下载方式:
1.超链接下载
<a href="/servlet_all/download/1.txt">下载 1.txt</a>
若浏览器能解析该资源的mime类型,则打开;若不能则直接下载;
2.编码下载 通过servlet完成
<a href="/servlet_all/download?name=1.txt">下载1.txt</a>
a.设置文件的mime类型
String mimeType=context.getMimeType(文件名)
response.setContentType(mimeType);
b.设置下载头信息 content-disposition
response.setHeader("content-disposition", "attachment;filename="+文件名称);
c.提供流
response.getOutputStream();
demo示例:
服务器上存放可下载的资源
编写servlet
package blog.csdn.net.web.download;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 文件下载
*/
public class DownloadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取get请求下载的文件名
String filename = request.getParameter("name");
// 防止get请求读取name名乱码
filename = new String(filename.getBytes("iso-8859-1"), "utf-8");
// 设置文件MIME类型
response.setContentType(getServletContext().getMimeType(filename));
// 设置content-disposition
response.setHeader("content-disposition", "attachment;filename=" + filename);
// 获取输出流,我的文件都放到WebRoot/download目录下
InputStream is = this.getServletContext().getResourceAsStream("/download/" + filename);
/*
* 相当于:
* ServletContext context=this.getServletContext();
* String fullFileName=context.getRealPath("/download/"+filename); //获取要下载的文件绝对路径
* InputStream is=new FileInputStream(fullFileName);
*/
BufferedInputStream bis = new BufferedInputStream(is);
// 获取输出流
BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());
// 对拷流
int b = -1;
while ((b = bis.read()) != -1) {
bos.write(b);
}
bos.flush();
bos.close();
bis.close();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
doGet(request, response);
}
}
web.xml文件
<servlet>
<description></description>
<display-name>DownloadServlet</display-name>
<servlet-name>DownloadServlet</servlet-name>
<servlet-class>blog.csdn.net.web.download.DownloadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DownloadServlet</servlet-name>
<url-pattern>/download</url-pattern>
</servlet-mapping>
最后.配置下载连接