文件上传之前我们需要Commons-fileUpload这个组件,才能成功的实现文件上传。

第一步:导入架包

jsp jquery easyui上传图片 jsp上传图片到文件夹_jsp

 这是我进行文件上传时使用到的架包(可以在百度上搜索,并且解压之后即可使用)

注:架包一定要放在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,如下:

jsp jquery easyui上传图片 jsp上传图片到文件夹_文件上传_02

 弄到这就已经把我们的需求都解决了,文件上传也就搞定了!!!