Servlet实现
package com.servlet;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils;
import com.bjsxt.entity.Student;
import com.bjsxt.service.StudentService;
import com.bjsxt.service.impl.StudentServiceImpl;
/**
* Servlet implementation class DowlandServlet
*/
public class DowlandServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public DowlandServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//获取指定的id
String id=request.getParameter("id");
StudentService sts=new StudentServiceImpl();
//通过id找到Student对象
Student findById = sts.findById(Integer.parseInt(id));
//指明文件所在服务器中的地址
String path=this.getServletContext().getRealPath("/upload");
//通过对象找到照片保存在服务器上的名字
String extName=findById.getPhotoName();
//创建文件对象获取照片对象,照片保存在upload文件夹下
File f=new File(path+"/"+extName);
//设置下载的文件大小
response.setContentLength((int)f.length());
//设置下载的文件类型
response.setContentType(findById.getPhotoType());
//获取文件的真实名字
String realName=findById.getRealName();
//获取请求类型,判断浏览器类型
String header = request.getHeader(("User-Agent").toLowerCase());
//设置文件格式,解决中文乱码
if (header.indexOf("msi")>=0) {
realName=URLEncoder.encode(realName,"utf-8");
}else{
realName=new String(realName.getBytes("utf-8"),"iso-8859-1");
}
//设置响应头
response.setHeader("Content-Disposition", "attachment;filename="+realName);
//将文件放入输入流中
InputStream is=new FileInputStream(f);
//将文件通过输出流下载
OutputStream os=response.getOutputStream();
IOUtils.copy(is, os);
is.close();
os.close();
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
jsp页面:
<a href="DowlandServlet?id=${stu.id }">下载2</a>