需要的都在注释里,修改一下就可以用了:
首先是jsp页面,这里下载通过判断id得到要下载的图片id值,访问servlet,Jsp页面:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<title>Title</title>
</head>
<body>
<!--输出所有的学生信息 -->
<a href="/updownload2/add.jsp">添加学生信息</a>
<table align="center" border="1" width="70%">
<tr>
<th>编号</th>
<th>姓名</th>
<th>年龄</th>
<th>分数</th>
</tr>
<c:forEach items="${requestScope.stuList2}" var="stu" >
<tr>
<td>${stu.id}</td>
<td>${stu.name }</td>
<td>${stu.age }</td>
<td>${stu.score}</td>
<td><img src="/updownload2/servlet/DownloadServlet?id=${stu.id}" width="100px"> </td>
<td><a href="/updownload2/servlet/DownloadServlet?id=${stu.id}">下载</a></td>
</tr>
</c:forEach>
</table>
</body>
</html>
servlet页面:
package com.bjsxt.servlet;
import com.bjsxt.entity.Student;
import com.bjsxt.service.StudentService;
import com.bjsxt.service.impl.StudentServiceImpl;
import org.apache.commons.io.IOUtils;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
public class DownloadServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int id=Integer.parseInt(request.getParameter("id"));
StudentService studentService=new StudentServiceImpl();
//查询数据库得到存储图片的格式和内容
Student student=studentService.findById(id);
//图片真实名字
String realName=student.getRealName();
//图片的唯一名 uuid生成的名字
String uuidName=student.getUuidName();
//什么类型 image/jpeg
String mimeType=student.getPhotoType();
//图片的路径 图片的名称
File file=new File("D:/upload",uuidName);
//设置响应的格式
//以图片的形式开始响应
response.setContentType(mimeType);
//设置响应长度
response.setContentLength((int)file.length());
//设置下载的时候 对中文图片的名字进行处理,保证下载的时候图片的名字是原来的中文
String userAgent = request.getHeader("User-Agent").toLowerCase();
if(userAgent.indexOf("msie")>=0){ //msie
realName = URLEncoder.encode(realName, "utf-8");
}else{
byte [] bytes = realName.getBytes("utf-8");
realName = new String(bytes,"iso-8859-1");
}
//让浏览器知道是下载的是什么类型(内容处理-附件)
response.setHeader("Content-disposition","attachment;filename="+realName);
//创建输入输出流
//先找到本地的文件
InputStream is=new FileInputStream(file);
//创建输出流--往浏览器进行输出
OutputStream os=response.getOutputStream();
//使用输入流输出流完成文件的下载 这里使用了 IOUtils工具类
IOUtils.copy(is,os);
//关闭流
is.close();
os.close();
}
}