最近看到了以前写的一个代码,使用ServletFileUpload上传文件或者图片,然后想想,代码都快丢了,就留个博客记录下吧!
前端index.jsp
<%@ 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>
<title>文件上传</title>
</head>
<body>
<form action="LunboAction" method="post" enctype="multipart/form-data">
本地目录:<input type="file" name="uploadFile" >
<input type="submit" value="上传头像">
</form>
</body>
</html>
Servlet类:LunboAction中的方法
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
// 判断上传表单是否为multipart/form-data类型
if(ServletFileUpload.isMultipartContent(request)) {
try {
// 1. 创建DiskFileItemFactory对象(文件处理工厂),设置缓冲区大小和临时文件目录
DiskFileItemFactory factory = new DiskFileItemFactory();
System.out.println("默认的临时文件夹:"+System.getProperty("java.io.tmpdir"));
// 2. 创建ServletFileUpload对象(文件上传处理器),并设置上传文件的大小限制。
ServletFileUpload sfu = new ServletFileUpload(factory);
sfu.setSizeMax(10*1024*1024);//10M
sfu.setHeaderEncoding("utf-8");
// 3 调用ServletFileUpload.parseRequest方法解析request对象,得到一个保存了所有上传内容的List对象。
List<FileItem> fileItemList = (List<FileItem>)sfu.parseRequest(new ServletRequestContext(request));
Iterator<FileItem> fileItems = fileItemList.iterator();
// 4. 遍历list,每迭代一个FileItem对象,调用其isFormField方法判断是否是上传文件
while(fileItems.hasNext()) {
FileItem fileItem = fileItems.next();
if(fileItem.isFormField()) {
String name = fileItem.getFieldName();
String value = fileItem.getString("utf-8");
System.out.println(name+"="+value);
} else {
//信息的文件格式
String fileName = fileItem.getName();
System.out.println("原文件名:"+fileName);
String suffix = fileName.substring(fileName.lastIndexOf('.'));
System.out.println("扩展名:"+suffix);
//新文件名
String newFileName = new Date().getTime()+suffix;
System.out.println("新文件名:"+newFileName);
//5调用fileItem的write方法,写入文件
File file = new File("D:/mywork/20170814ImageUpload/WebContent/touxiang/"+newFileName);
System.out.println(file.getAbsolutePath());
fileItem.write(file);
//6,调用fileItem的delete方法删除临时文件
fileItem.delete();
//7 存到数据库,保存源文件名称2,保存相对路径
try {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/test";
String name = "root";
String password = "root";
Connection conn = DriverManager.getConnection(url, name, password);
String Sql = "INSERT INTO t_touxiang(image_path,user_id,old_name)VALUES(?,?,?)";
PreparedStatement ps = conn.prepareStatement(Sql);
ps.setString(1, newFileName);
ps.setInt(2, 1111);
ps.setString(3, fileName);
int rows = ps.executeUpdate();
if(rows > 0) {
session.setAttribute("image_name", fileName);
session.setAttribute("image_path","touxiang/"+newFileName);
response.sendRedirect(request.getContextPath()+"/readPicture");
} else {
response.sendRedirect("http://www.baidu.com");
}
} catch (Exception e) {}
}
}
} catch (Exception e) { }
}
}
然后后台的Servlet读取图片信息
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String result = null;
try {
int id =2;
String sqlString="SELECT image_path FROM t_touxiang WHERE id=?";
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/test";
String name = "root";
String password = "root";
Connection conn = DriverManager.getConnection(url, name, password);
PreparedStatement ps = conn.prepareStatement(sqlString);
ps.setInt(1, id);
ResultSet urs = ps.executeQuery();
while(urs.next()) {
System.out.println(urs.getString("image_path"));
result = urs.getString("image_path");
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
request.setAttribute("txt", result);
request.getRequestDispatcher("/ShowImage.jsp").forward(request, response);
}
前台展示图片,ShowImage.jsp
<%@ 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>
<%
String path = (String)request.getAttribute("txt");
%>
</head>
<body>
<span style="white-space:pre"></span><div>
<form action="" method="post" enctype="multipart/form-data">
<img src="./touxiang/<%=path %>" width="200" height="200">
</form>
</div>
</body>
</html>