文件上传之前我们需要Commons-fileUpload这个组件,才能成功的实现文件上传。
第一步:导入架包
这是我进行文件上传时使用到的架包(可以在百度上搜索,并且解压之后即可使用)
注:架包一定要放在web应用下面的WEB-INF文件里面,这样Tomcat才能识别的到
第二步:编写jsp页面(提示:简单的上传文件,使用type="file")
代码如下:
<html>
<head>
<title>文件上传</title>
</head>
<body>
<!--1、form表单的数据类型-->
<!--2、文件input必须有name值-->
<!--3、提交方式必须为post-->
<form action="upload" method="post" enctype="multipart/form-data">
<input type="file" name="file1" >
<input type="file" name="file2" >
<button type="submit">点击提交</button>
</form>
</body>
</html>
注:代码中注释的部分是重点(必填),否则报错
第三步:编写处理器
需求:(1)限制图片的格式
(2)限制图片的大小(单个或多个)
(3)添加带有中文的图片名称会报错(解决乱码的问题,必须由系统统一分配文件名)
(4)可以一次性添加几张图片,并且不能重复
(5)添加图片成功后,需要新建文件夹(使用日期的方式),方便下次查找图片
@WebServlet("/upload")
public class FileUploadServlet 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 {
//页面会将文件提交到处理器
//声明文件上传的对象
SmartUpload su = new SmartUpload();
//初始化su对象(将数据托管给它)
su.initialize(getServletConfig(),req,resp);
//获取要上传的文件
try {
su.upload();
//限定只能够上传图片格式
su.setAllowedFilesList("jpg,png,gif,jpeg");
//限制单个
su.setMaxFileSize(1024);
//限制一次上传
su.setTotalMaxFileSize(1024*10);
int year = LocalDate.now().getYear();
int mouth = LocalDate.now().getMonthValue();
int day = LocalDate.now().getDayOfMonth();
//找到image在项目下的路径
//继续生成新的文件夹
String path = getServletContext().getRealPath("/image/"+year+"/0"+mouth+"/"+day);
java.io.File f = new java.io.File(path);
//判断是否保存,不保存则创建
if (!f.exists()){
//多个文件需要加s
f.mkdirs();
}
//只能保存单个
//su.save(path);
//上传多个要使用循环
//getFiles 取出form表单上传的文件
Files files = su.getFiles();
for (int i = 0;i<files.getCount();i++){
//调用文件的保存方法
File file = files.getFile(i);
//将原来的名字取出来
//String fileName = file.getFileName();
//不推荐直接解决文件名的乱码问题
//fileName = new String(fileName.getBytes(),"UTF-8");
//而是由系统统一重新分配
String fileName = UUID.randomUUID().toString()+"."+file.getFileExt();
file.saveAs(path+"\"+fileName);
}
//重定向回到页码上去
resp.sendRedirect("index.jsp");
}catch (Exception e){
e.printStackTrace();
}
}
}
注:里面都有打备注,上传图片日期使用的是(LocalDate函数),相比之前既简单又方便;
重点:如果我们在web应用里面创建一个image的文件夹,Tomcat并非识别的到,
运行之后,会出现一个out文件(这个文件是工具自带的)
在out文件下面的项目下创建image,如下:
弄到这就已经把我们的需求都解决了,文件上传也就搞定了!!!