Jsp+servlet实现文件上传至服务器
- 首先导入jar包
前台
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>文件上传</title>
</head>
<body>
<form method="post" enctype="multipart/form-data" action="uploadServlet">
<table>
<tr>
<td>
文件上传
</td>
</tr>
<tr>
<td align="center">
上传用户:
</td>
<td>
<input type="text" name="username" />
</td>
</tr>
<tr>
<td align="center">
文件1:
</td>
<td>
<input type="file" name="file" />
</td>
</tr>
</table>
</form>
</body>
</html>
servlet
@WebServlet({"/uploadServlet"})
public class uploadSerclet 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 {
//确定文件上传目录
String savepath = this.getServletContext().getRealPath("/WEB-INF/upload");
//获得文件上传路径
File file=new File(savepath);
//判断文件路径是否存在,不存在就则创建(指定不一定存在)
if(!file.exists()&& !file.isDirectory()){
file.mkdir();
}
/*exists()
测试此抽象路径名表示的文件或目录是否存在。
isDirectory()
测试此抽象路径名表示的文件是否为目录。
mkdir()
创建由此抽象路径名命名的目录。*/
String msg="";
System.out.println(savepath);//打印真实路径
//1.创建DiskFileItemFactory
DiskFileItemFactory factory = new DiskFileItemFactory();
//2.得到ServletFileUpload核心类
ServletFileUpload upload = new ServletFileUpload(factory);
//3.判断提交上来数据是否是我们的多部件表单数据
if(!ServletFileUpload.isMultipartContent(req)){
return;
}
//4.使用核心类得到包含所有表单元素的List集合
try {
List<FileItem> list = upload.parseRequest(req);
for (FileItem fileItem : list) {
//获取普通元素
if (fileItem.isFormField()){
String name = fileItem.getFieldName();
}else {
//获取文件表单元素
String name = fileItem.getName();
if (name == null || "".equals(name)) {
continue;//直接进行下一次循环
}
//获得真实的文件名
//找到最后一个出现\的位置从\的后一位开始读取字符串(找到文件名)
name=name.substring(name.lastIndexOf("\\")+1);
//获得Item中文件的输入流
InputStream is = fileItem.getInputStream();
//获得输出流
FileOutputStream out = new FileOutputStream(savepath+ "\\" + name);
System.out.println(savepath+ "\\" + name);
//创建缓冲区
byte[] buffer = new byte[1024];
int length = 0;
while ((length=is.read(buffer))>0){
out.write(buffer);
out.flush();
}
is.close();
out.close();
}
}
} catch (FileUploadException e) {
e.printStackTrace();
msg="文件上传失败";
req.setAttribute("msg",msg);
req.getRequestDispatcher("message.jsp").forward(req, resp);
}
msg="文件上传成功";
req.setAttribute("msg", msg);
req.getRequestDispatcher("message.jsp").forward(req, resp);
}
}
结果接收页
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>接收上传结果消息</title>
</head>
<body>
${msg}
</body>
</html>
最后在控制台找到打印的真实路径就可以找到上传的文件了