首先需要两个jar包,直接在pom文件中添加依赖
<!-- 引入commons-io包-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
<!-- commons-fileUpload包-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.5</version>
</dependency>
前端所需要完成的代码
<form method="post" enctype="multipart/form-data" action="${pageContext.request.contextPath}/fileUpload">
<input type="file" name="uploadFile">
<input type="submit">
</form>
<h3>${msg}</h3>
(这里用了EL表达式,需要额外的两个包以及在页面上引用
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> )
然后就是servlet代码(都有注释!)
package com.tangzhi.webhomework.Controller;
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 javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.List;
@WebServlet(name = "/fileUpload",value = "/fileUpload")
public class FileUploadController extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
FileItemFactory fileItemFactory = new DiskFileItemFactory();
ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
// request.getSession().getServletContext()是获取的servlet容器对象,
// 相当于tomcat容器了。getRealPath("/") 获取实际路径,项目发布时,
// 在容器中的实际路径。
String filePath = getServletContext().getRealPath("/upload");
File f = new File(filePath);
//不存在该文件夹则创建
if (!f.exists()){
if (f.mkdirs()){
System.out.println("upload文件夹创建成功!");
}else {
System.out.println("upload文件夹创建失败!");
}
//文件夹存在则执行上传操作
}else {
List<FileItem> list = null;
try {
list = servletFileUpload.parseRequest(req);
} catch (FileUploadException e) {
e.printStackTrace();
}
for (FileItem fileItem: list) {
//获取待上传文件名,分割字符获取文件类型,做文件上传限制
String WaiteUploadFileName = fileItem.getName();
//获取文件名的.的下标
int index = WaiteUploadFileName.indexOf(".");
String fileType = WaiteUploadFileName.substring(index);
//类型判断,满足的文件类型才上传(此处是限制只能上传图片)
if (fileType.equals(".jpg") || fileType.equals(".jpeg") || fileType.equals(".png") || fileType.equals(".gif")
|| fileType.equals(".bmp") || fileType.equals(".tiff") || fileType.equals(".ai") || fileType.equals(".cdr")
|| fileType.equals(".eps")){
//拼接新文件名:由当前时间加当前文件的文件类型
String newFileName = System.currentTimeMillis()+fileType;
File file = new File(filePath,newFileName);
try {
//上传文件
fileItem.write(file);
req.setAttribute("msg","文件上传成功!");
req.getRequestDispatcher("/index.jsp").forward(req,resp);
} catch (Exception e) {
System.out.println("文件上传失败!");
e.printStackTrace();
}
}else {
System.out.println("文件上传失败!");
req.setAttribute("msg","文件不符合图片要求格式!");
req.getRequestDispatcher("/index.jsp").forward(req,resp);
}
}
}
}
}
实现效果(此处是限制只能上传图片格式的文件,可自定义):
更新 新增数据同时实现文件上传
import com.example.classHomeWork.Dao.Impl.NewsImpl;
import com.example.classHomeWork.Dao.NewsDao;
import com.example.classHomeWork.Model.FirstLevelTitle;
import com.example.classHomeWork.Model.news_detail;
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 javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
@WebServlet(name = "/News",value = "/News")
public class NewsController extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setHeader("Content-type","text/html;charset=utf-8");
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
String type = req.getParameter("type");
if (type.equals("insert")){
try {
selectTitleName(req,resp);
} catch (SQLException sqlException) {
sqlException.printStackTrace();
}
}else if (type.equals("insertNews")){
insertNews(req,resp);
}
}
private void insertNews(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
NewsDao newsDao = new NewsImpl();
news_detail news = new news_detail();
FileItemFactory fileItemFactory = new DiskFileItemFactory();
ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
String filePath = getServletContext().getRealPath("/upload");
File file = new File(filePath);
List<FileItem> list = null;
try {
list = servletFileUpload.parseRequest(req);
} catch (FileUploadException e) {
e.printStackTrace();
}
for (FileItem fileItem : list){
//判断是否为文件
boolean fromElementType = fileItem.isFormField();
if(fromElementType){
//不是文件就获取元素的name名
String elementName = fileItem.getFieldName();
if (elementName.equals("categoryId")){
String categoryId = fileItem.getString();
news.setCategoryId(Integer.parseInt(categoryId));
}
if (elementName.equals("title")){
String title = fileItem.getString("utf-8");
news.setTitle(title);
}
if (elementName.equals("summary")){
String summary = fileItem.getString("utf-8");
news.setSummary(summary);
}
if (elementName.equals("content")){
String content = fileItem.getString("utf-8");
news.setContent(content);
}
if (elementName.equals("author")){
String author = fileItem.getString("utf-8");
news.setAuthor(author);
}
if (elementName.equals("createDate")){
String createDate = fileItem.getString();
System.out.println(createDate);
news.setCreateDate(createDate);
}
}else {
//不存在该文件夹则创建
if (!file.exists()){
if (file.mkdirs()){
System.out.println("upload文件夹创建成功!");
}else {
System.out.println("upload文件夹创建失败!");
}
//文件夹存在则执行上传操作
}else {
//获取待上传文件名,分割字符获取文件类型,做文件上传限制
String WaiteUploadFileName = fileItem.getName();
//获取文件名的.的下标
int index = WaiteUploadFileName.indexOf(".");
String fileType = WaiteUploadFileName.substring(index);
//类型判断,满足的文件类型才上传(此处是限制只能上传图片)
if (fileType.equals(".jpg") || fileType.equals(".jpeg") || fileType.equals(".png") || fileType.equals(".gif")
|| fileType.equals(".bmp") || fileType.equals(".tiff") || fileType.equals(".ai") || fileType.equals(".cdr")
|| fileType.equals(".eps")){
//拼接新文件名:由当前时间加当前文件的文件类型
String newFileName = System.currentTimeMillis()+fileType;
File f = new File(filePath,newFileName);
try {
//写入文件
fileItem.write(f);
} catch (Exception e) {
System.out.println("文件上传失败!");
e.printStackTrace();
}
//将写入的文件路径拼接出来并存入news_detail对象
String picPath = filePath+"\\"+newFileName;
news.setPicPath(picPath);
}else {
System.out.println("插入失败!");
req.getRequestDispatcher("/index.jsp").forward(req,resp);
}
}
}
}
//这不考虑插入失败
int result = newsDao.insertNews(news);
req.getRequestDispatcher("/index.html").forward(req,resp);
}
public void selectTitleName(HttpServletRequest req, HttpServletResponse resp) throws SQLException, ServletException, IOException {
NewsDao newsDao = new NewsImpl();
List<FirstLevelTitle> list = new ArrayList<>();
list = newsDao.selectTitle();
req.setAttribute("list",list);
req.getRequestDispatcher("jsp/insert_News.jsp").forward(req,resp);
}
}