Jsp+servlet实现文件上传至服务器

Jsp+servlet实现文件上传至服务器

  • 首先导入jar包
    在这里插入图片描述

前台

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

  
    文件上传
  
  
  
文件上传
上传用户:
文件1:

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  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" %>


    接收上传结果消息


${msg}


最后在控制台找到打印的真实路径就可以找到上传的文件了

jar下载

http://commons.apache.org/proper/commons-fileupload/

你可能感兴趣的:(JAVA)