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

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>

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

jar下载

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值