看了好多资料感觉多少都不太对,这个是实践过确实没有问题的
准备:导入jar包(这里演示的是1.2版本,可以上maven官网下载)
commons-fileupload-1.4.jar
commons-io-2.8.0.jar
在项目中导入这两个包(步骤很简单,此处省略)
点击红色标记处即可下载
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<form action="/UpLoadServlet" method="post" enctype="multipart/form-data">
姓名:<input type="text" name="name">
图片:<input type="file" name="myFile" value="选择文件">
<br><input type="submit" value="提交">
</form>
</body>
</html>
注意:
提交方式必须为post
属性必须为 enctype=“multipart/form-data”
UpLoadServlet.java
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
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.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
public class UpLoadServlet extends HttpServlet
{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
resp.setCharacterEncoding("UTF-8");
//1.文件上传工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
//2.核心类
ServletFileUpload upload = new ServletFileUpload(factory);
try
{
//解析request对象,表单的数据在list里面
List<FileItem> list = upload.parseRequest(req);
for (FileItem fileItem : list)
{
//判断是否是表单类型
if(fileItem.isFormField())
{
String name = fileItem.getString("utf-8");
System.out.println(name);
}
else
{
String name = fileItem.getName();
String dateName = new SimpleDateFormat("yyyy_MM_ss").format(new Date());
int i=1;
String fieldname = fileItem.getFieldName();
//得到上传文件的输入流
InputStream inputStream = fileItem.getInputStream();
//IO流的拷贝
File file = new File("D:\\idealProj1\\jsp文件上传\\web\\images"+"/"+dateName+"_"+i+"_"+name);
FileOutputStream ops = new FileOutputStream(file);
IOUtils.copy(inputStream,ops);
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(ops);
i++;
}
}
} catch (FileUploadException e)
{
e.printStackTrace();
}
}
}