tomcat文件上传

文件上传

  1. 要有一个form标签,method=post请求

  2. 在form标签中的encType属性值必须为multipart/form-data值

  3. 在form标签中使用input type=file添加上传的文件

  4. 编写服务器代码接受,处理上传的数据。

    image-20210124113630510

    文件上传时是以二进制流传输,所以要用字节流

    req.getInputStream();

    代码:

ServletInputStream inputStream = req.getInputStream();
byte[] buffer = new byte[1024000];
int read = inputStream.read(buffer);
System.out.println(new String(buffer,0,read));

结果:

image-20210124114420722

将数据上传到服务器之后,我们需要对数据进行解析,需要用到两个包 commons-fileupload-1.4.jar 和 commons-io-2.8.0.jar

在WEB-INF目录下新建一个lib目录,将这两个包导入

commons-fileupload-1.4.jar:https://gitee.com/Doomfist_iron/javaweb/blob/master/jar/commons-fileupload-1.4.jar

commons-io-2.8.0.jar:https://gitee.com/Doomfist_iron/javaweb/blob/master/jar/commons-io-2.8.0.jar

步骤:

  1. 判断是否是多段数据( ServletFileUpload.isMultipartContent(req) )
  2. 如果是,创建工厂实现类( FileItemFactory fileItemFactory = new DiskFileItemFactory(); )
  3. 创建用于解析上传数据的工具类( ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory); )
  4. 解析上传的数据,叨叨每一个表单项( List list = servletFileUpload.parseRequest(req);)
  5. 循环判断每一个表单项是否是上传的类型 ( fileItem.isFormField() )

代码:

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //1 先判断上传的数据是否多段数据(只有是多段的数据,才是文件上传的)
        if (ServletFileUpload.isMultipartContent(req)) {
//           创建FileItemFactoserry工厂实现类
            FileItemFactory fileItemFactory = new DiskFileItemFactory();
            // 创建用于解析上传数据的工具类ServletFileUpload类
            ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
            try {
                // 解析上传的数据,得到每一个表单项FileItem
                List<FileItem> list = servletFileUpload.parseRequest(req);
                // 循环判断,每一个表单项,是普通类型,还是上传的文件
                for (FileItem fileItem : list) {
					//判断判断每一个表单项是否是上传的内型
                    if (fileItem.isFormField()) {
                        // 普通表单项

                        System.out.println("表单项的name属性值:" + fileItem.getFieldName());
                  
                        // 参数UTF-8.解决乱码问题
                        System.out.println("表单项的value属性值" + fileItem.getString("UTF-8"));
                       

                    } else {
                        // 上传的文件
                        System.out.println("表单项的name属性值:" + fileItem.getFieldName());
                        System.out.println("上传的文件名:" + fileItem.getName());
//							将上传的文件写入
                        fileItem.write(new File("e:\\" + fileItem.getName()));
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    }
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页