所需jar包
servlet实现:
将图片上传到服务器的webApp指定的目录下,再将地址保存到数据库。
package com.servlet;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.UUID;
import javax.servlet.ServletException;
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.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import com.bjsxt.entity.Student;
import com.bjsxt.service.StudentService;
import com.bjsxt.service.impl.StudentServiceImpl;
/**
* @author Administrator
*需要先导入commons-fileupload.jar和commons-io.jar包
*/
public class AddServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//1创建FileItemFactory对象
FileItemFactory factory=new DiskFileItemFactory();
//2创建ServletFileUplode对象
ServletFileUpload servletFileUpload = new ServletFileUpload(factory);
servletFileUpload.setHeaderEncoding("utf-8");//解决file表单项的文件名中文乱码问题
servletFileUpload.setFileSizeMax(16*1024);//单个文件大小的上限
servletFileUpload.setSizeMax(5*16*1024);//一次上传所有文件总大小的上限
//3通过ServletFileUplode对象实现上传操作,将客户端一个个表单项封装到一个个FileItem中
List<FileItem> itemlist=null;
try{
itemlist=servletFileUpload.parseRequest(request);
}catch(FileUploadException e){
e.printStackTrace();
request.setAttribute("mess", "文件不能超过16kb");
request.getRequestDispatcher("/add.jsp").forward(request, response);
return;
}
//4便利各个FileItem(相当于对各个表单项进行处理)
String name = null;
int age = 0;
double score = 0;
String realName =null;
String photoName = null;
String photoType = null;
for (int i = 0; i < itemlist.size(); i++) {
//取出第i个表单项
FileItem item=itemlist.get(i);
String filedName=item.getFieldName();
if (item.isFormField()) {
if ("name".equals(filedName)) {
name=item.getString("utf-8");
}
if ("age".equals(filedName)) {
age=Integer.parseInt(item.getString());
}
if ("score".equals(filedName)) {
score=Double.parseDouble(item.getString());
}
}else if("photo".equals(filedName)){
//完善5:限制上传文件的大小 ,不应该在这写,因为程序执行到这时已经将文件放入了临时文件夹中
// long size=item.getSize();
// if (size>16*1024) {
// request.setAttribute("mess", "文件不能超过16kb");
// request.getRequestDispatcher("/add.jsp").forward(request, response);
// return;
// }
//完善4:上传指定格式的文件
String contentType=item.getContentType();
photoType=item.getContentType();
if (!"image/jpeg".equals(contentType) && "image/gif".equals(contentType)) {
request.setAttribute("mess", "只能上传jpg和gif文件");
request.getRequestDispatcher("/add.jsp").forward(request, response);
return;
}
//指定上传的文件夹(tomcat的webApps目录下)当前项目下的文件夹
String realpath=this.getServletContext().getRealPath("/upload");
File dir=new File(realpath);
if (!dir.exists()) {
dir.mkdirs();
}
//指定上传的文件名
realName=item.getName();
//指定上传的文件夹和文件名
//完善2:为了防止文件的同名覆盖,上传到服务器端的文件重新命名
UUID uuid=UUID.randomUUID();
String extName=realName.substring(realName.lastIndexOf("."));
photoName=uuid.toString()+extName;
File file=new File(dir, photoName);
try {
item.write(file);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
//将获取的数据保存到对象中
Student stu=new Student( name, age, score, realName, photoName, photoType);
StudentService stuService = new StudentServiceImpl();
//执行插入
int n = stuService.save(stu);
//页面跳转
if (n != 0) {
// 重定向:/后面要跟上下文路径 /stumgr /stumgr2
response.sendRedirect(request.getContextPath()
+ "/servlet/ShowAllServlet");
} else {
request.setAttribute("mess", "添加失败!");
request.getRequestDispatcher("/add.jsp").forward(request, response);
}
}
}
jsp实现:上传文件的格式必须使用过enctype="multipart/form-data"类型
<body>
<!-- 上传文件必须使用enctype="multipart/form-data"类型 -->
<form action="servlet/AddServlet" method="post" enctype="multipart/form-data">
用户名:<input type="text" name="name"><br>
年龄:<input type="text" name="age"><br>
分数:<input type="text" name="score"><br>
文件:<input type="file" name="photo"><br>
<input type="submit" value="提交">
</form>
</body>