import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder;
public class FileServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// (1) 要获取下载文件的路径
String realPath="E:\\D\\Codes\\javaweb\\smbms\\servlet-01\\target\\classes\\test.jpg";
// String realPath = this.getServletContext().getRealPath("/test.jpg");
// 从当前项目中找test.jpg
// (2) 下载的文件名是啥
String fileName = realPath.substring(realPath.lastIndexOf("\\") + 1);
//从最后一个 “/ ” 开始查找文件名
// (3)让 浏览器支持下载, 设置支持 中文文件名
resp.setHeader("Content-Disposition", "attachment; filename="+ URLEncoder.encode(fileName,"UTF-8"));
// (4)获取下载文件的输入流
FileInputStream in = new FileInputStream(realPath);
// (5)创建缓冲区
int len=0;
byte[] buffer = new byte[1024];
// (6) 获取OutPutStream对象
ServletOutputStream out = resp.getOutputStream();
// (7)将FileOutPutStream 流写入到buffer缓冲区
while ((len = in.read(buffer))>0){
out.write(buffer ,0,len);
}
// (8) 使用 OutPutStream 将缓冲区的数据输出到客户端
// (9)关闭流
in.close();
out.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
配置
<servlet>
<servlet-name>file</servlet-name>
<servlet-class>FileServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>file</servlet-name>
<url-pattern>/filedown</url-pattern>
</servlet-mapping>