上传页面的代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form method="post" action="BookServlet" ENCTYPE="multipart/form-data">
姓名:<input type = "text" name = "name">
价格:<input type = "text" name ="price">
文件:<input type="file" name="file">
<button type = "submit">上传</button>
</form>
</body>
</html>
处理上传的Servlet代码:
package cn.edu.uestc.DataUtil;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.Field;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import cn.edu.uestc.Bean.BookInfo;
public class BookServlet extends HttpServlet
{
/**
*
*/
private static final long serialVersionUID = 5851632898969968329L;
public BookServlet()
{
super();
}
public void destroy()
{
super.destroy();
}
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setContentType("text/html; charset=UTF-8");
doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
// 以判断出提交过来的表单是否为文件上传表单
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
PrintWriter out;
out = response.getWriter();
Class<BookInfo> clazz = BookInfo.class;
BookInfo bookInfo;
try
{
// 创建此 Class 对象所表示的类的一个新实例。
bookInfo = (BookInfo) clazz.newInstance();
if (isMultipart)
{
// 构造了一个文件上传处理对象
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
// 提交的所有文件内容
List<FileItem> fileItemList = upload.parseRequest(request);
for (FileItem fileItem : fileItemList)
{
if (fileItem.isFormField())
{
try
{
// 返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。
Field field = clazz.getDeclaredField(fileItem.getFieldName());
field.setAccessible(true); // 避免private不可访问抛出异常
try
{
// 将指定对象变量上此 Field 对象表示的字段设置为指定的新值。
field.set(bookInfo, new String(fileItem.get(), "utf-8"));
} catch (Exception e)
{
field.set(bookInfo, Double.valueOf(new String(fileItem.get(), "utf-8")));
}
} catch (Exception e)
{
continue;
}
} else
{
String name = fileItem.getName();
String uid = UUID.randomUUID() + name.substring(name.lastIndexOf('.'));
bookInfo.setPath(uid);
// 获取images的路径
String path = request.getSession().getServletContext().getRealPath("images")
+ File.separatorChar + uid;
// 把上传的文件存储到服务器中,完成上传操作
File file = new File(path);
fileItem.write(file);
}
}
}
boolean result = Data_Util.insert(bookInfo);
if (result)
{
response.sendRedirect("BookServletFind");
} else
{
//
out.print("<script>alert('添加shibai!')</script>");
}
} catch (Exception e)
{
e.printStackTrace();
}
}
}
下载页面代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<table>
<thead>
<tr>
<th>书名</th>
<th>价格</th>
<th>封面</th>
</tr>
</thead>
<tbody>
<c:forEach var="bookInfo" items="${bookInfoList}">
<tr>
<td>${bookInfo.name }</td>
<td>${bookInfo.price }</td>
<td><a href="#"> <img height="50" width="50" src="../images/${bookInfo.path }" /> </a></td>
<td><a href = "download?imgName=${bookInfo.path }">下载</a></td>
</tr>
</c:forEach>
</tbody>
</table>
</body>
</html>
下载Servlet代码:
package cn.edu.uestc.DataUtil;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/Content/download")
public class ImgDownLoadServlet extends HttpServlet
{
private static final long serialVersionUID = 6780523201093270778L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
try
{
String path = request.getSession().getServletContext().getRealPath("images") + File.separatorChar;
//得到下载图片的名字
String fname = request.getParameter("imgName");
//创建file对象
File file = new File(path + fname);
//设置response的编码方式
response.setContentType("image/jpeg");// 定义输出类型
response.setCharacterEncoding("UTF-8");
fname = java.net.URLEncoder.encode(fname, "UTF-8");
response.setHeader("Content-Disposition", "attachment; filename=" + fname);
//读出文件到I/O流
FileInputStream stream = new FileInputStream(file);
BufferedInputStream bufferedInputStream = new BufferedInputStream(stream);
byte[] b = new byte[1024];//相当于缓存
long k = 0;//该值用于计算当前实际下载了多少字节
//从response对象总得到输出流,准备下载
OutputStream myout = response.getOutputStream();
//开始循环下载
while (k < file.length())
{
int j = bufferedInputStream.read(b, 0, 1024);
k += j;
//将b中的数据写到客户端的内存
myout.write(b, 0, j);
}
//将写入客户端内存的数据,刷新到磁盘
myout.flush();
} catch (Exception e)
{
System.out.println(e);
}
}
}