servlet实现文件上传接受

这几天学了一点文件上传,有很多不会,在网查了许多博客,但是最新的没有,都比较久了

因为我是小白,版本更新了,以前的方法自己费了好久才弄懂,写个随笔方便以后查找

代码奉上:
  1. package com.demo.test;
  2.  
  3. import org.apache.commons.fileupload.FileItem;
    import org.apache.commons.fileupload.FileItemFactory;
    import org.apache.commons.fileupload.FileUploadException;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;
  4.  
  5. import javax.servlet.ServletException;
    import javax.servlet.ServletInputStream;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.Part;
    import java.io.File;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Date;
    import java.util.List;
  6.  
  7. public class UpFile extends HttpServlet{
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    // enctype="multipart/form-data"form设置该属性后,无法使用request读取数据,必须以流的形式接收
  8.  
  9. // 解析上传的文件,需要导入两个jar包commons-fileupload.jar,而它需要依赖于commons-io.jar包
  10.  
  11. // 处理文件上传数据
    // 1判断是否为多段数据(只有是多段时,才是文件上传)
    if (ServletFileUpload.isMultipartContent(req)){
  12.  
  13. // 创建FileItemFactory工厂实现类
    FileItemFactory fileItemFactory = new DiskFileItemFactory();
    // 创建用于解析上传数据的工具类ServletFileUpload类
    ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
    // 解析上传的数据,得到每一个表单项的FileItem
    try {
    List<FileItem> list = servletFileUpload.parseRequest(req);
    // 循环判断,每一个表单项,是普通表单项还是特殊表单项
  14.  
  15. for (FileItem fileitem: list
    ) {
  16.  
  17. if (fileitem.isFormField()){
    // 普通表单项,非文件
    System.out.println("表单项的name属性值:"+fileitem.getFieldName());
    // 参数UTF-8解决中文乱码问题
    System.out.println("表单项的value属性值:"+fileitem.getString("UTF-8"));
    }else {
    // 上传的文件,获取文件的扩展名
    String filename = fileitem.getFieldName();
    // 这里说一下fileitem.getName()是获取文件的文件名,
    // 而fileitem.getFieldName()是获取文件input中的name值
    String lastname = filename.substring(filename.lastIndexOf('.'));
    // filename.substring(index[,length])方法,两个参数,实现字符串分割,index分隔位置的索引
    // filename需要分割的字符串,length可选参数,分割字符串的长度,默认index之后全部
  18.  
  19. System.out.println("表单项的name属性值:"+filename);
  20.  
  21. String newFileName = new Date().getTime()+lastname;
    // 采用时间戳保证文件名的唯一性
  22.  
  23. fileitem.write(new File("D:\\temp\\image\\"+newFileName));
    }
    }
    } catch (FileUploadException e) {
    e.printStackTrace();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
  24.  
  25. }
    }
    前端代码:
  1. <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>图片文件上传与解析</title>
    </head>
    <body>
    <form action="/test/upFile" method="post" enctype="multipart/form-data">
    <span>username</span><br>
    <input type="text" placeholder="请输入对图片的描述" name="username"><br>
    <span>选择文件</span>
    <input type="file" name="myfile" id="file"><br>
    <input type="submit" value="确认">
    </form>
    </body>
    </html>
  2.  
  3. 需要注意的是;
    该方法需要依赖两个jar包,代码注释中已说明

2020最新Servlet+form表单实现文件上传(图片)的更多相关文章

  1. Ajax提交Form表单及文件上传

    刚刚申请下来的博客,写得第一篇.有点小激动,本人以前是一名工业3D设计师突然有些变故做上了JavaWeb开发: 前几天,发现了一些小问题.我在写后台管理页面时,需要上传一张图片.于是我就用很普通的Fo ...

  2. Django的form表单之文件上传

    在生成input标签的时候可以指定input标签的类型为file类型 <!DOCTYPE html> <html lang="en"> <head&g ...

  3. php+form表单的文件上传

    <!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. form表单多文件上传

    1.html/jsp主页 <%@ page language="java" contentType="text/html; charset=UTF-8" ...

  5. Django框架 之 Form表单和Ajax上传文件

    Django框架 之 Form表单和Ajax上传文件 浏览目录 Form表单上传文件 Ajax上传文件 伪造Ajax上传文件 Form表单上传文件 html 1 2 3 4 5 6 7 <h3& ...

  6. [原创]java WEB学习笔记49:文件上传基础,基于表单的文件上传,使用fileuoload 组件

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  7. Struts2文件上传(基于表单的文件上传)

    •Commons-FileUpload组件 –Commons是Apache开放源代码组织的一个Java子项目,其中的FileUpload是用来处理HTTP文件上传的子项目   •Commons-Fil ...

  8. $_FILES参数详解及简单<form>表单无刷新上传文件

    $_FILES:经由 HTTP POST 文件上传而提交至脚本的变量,类似于旧数组$HTTP_POST_FILES 数组(依然有效,但反对使用)详细信息可参阅 POST方法上传 $_FILES数组内容 ...

  9. 通过Ajax提交form表单来提交上传文件

    Ajax 提交form方式可以将form表单序列化 然后将数据通过data提交至后台,例如: $.ajax({      url : "http://localhost:8080/" ...

随机推荐

  1. RabbitMQ学习总结(1)-基础概念

    1. 概念 1.1 AMQP协议 AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消 ...

  2. ASP.NET中使用Cache类来缓存页面的信息

    实现 如果将数据保存在全局应用程序对象Application中,值将会在程序运行时一直存在,而我们只需要缓存一段时间. ASP.NET提供了一个Cache对象来执行对象数据的缓存. Cache对象是S ...

  3. Hadoop生态系统入门进阶之一

    组成系统介绍 HDFS:Hadoop 生态圈的基本组成部分是 Hadoop 分布式文件系统(HDFS).HDFS 是一种分布式文件系统,数据被保存在计算机集群上,HDFS 为 HBase 等工具提供了 ...

  4. 用 Python 写出这样的进度条,刷新了我对进度条的认知

    ❞ 1 简介 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那么针对这三类人,我给 ...

  5. Javascript注意点

    Javascript注意点 在img标签中的src如果为相对路径, 但是在js获取的时候会转为全路径 候选框中, 在执行onclick之前, 会由于html的特征先设置checked属性 为a标签添加 ...

  6. 云原生数据库mysql对共享存储分布式文件系统的接口需求分析

    1. 引言 云原生数据库跟分布式mpp数据库是有差异的,虽然两者都是计算与存储分离,但是在资源的占用上有所不同.云原生数据库是shard everything架构,其依赖的存储资源.内存资源.事务资源 ...

  7. java 匿名内部类与包的声明访问

    一 匿名内部类 1.匿名内部类的概念 内部类是为了应对更为复杂的类间关系.查看源代码中会涉及到,而在日常业务中很 难遇到,这里不做赘述. 最常用到的内部类就是匿名内部类,它是局部内部类的一种. 定义的 ...

  8. Vue Slots

    子组件vue <template> <div> <slot v-if="slots.header" name="header"&g ...

  9. MongoDB学习1:认识文档数据库MongoDB

    1. 关于MongoDB 什么是MongoDB 一个以JSON为数据模型的文档数据库 为什么叫文档数据库 文档来自于"JSON Document",并非我们一般理解的pdf,wor ...

  10. 解决 EntityFrameworkCore tool 3.1 init.ps1 is not recognized 问题

    昨天将项目升级到.net core 3.1后, 打开vs2019 Package Manager Console后突然发生了错误,如下 最终导致EntityFramework 迁移相关命令都不能正常使 ...