servlet实现文件上传接受

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

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

代码奉上:
package com.demo.test;

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; 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; public class UpFile extends HttpServlet{
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// enctype="multipart/form-data"form设置该属性后,无法使用request读取数据,必须以流的形式接收 // 解析上传的文件,需要导入两个jar包commons-fileupload.jar,而它需要依赖于commons-io.jar包 // 处理文件上传数据
// 1判断是否为多段数据(只有是多段时,才是文件上传)
if (ServletFileUpload.isMultipartContent(req)){ // 创建FileItemFactory工厂实现类
FileItemFactory fileItemFactory = new DiskFileItemFactory();
// 创建用于解析上传数据的工具类ServletFileUpload类
ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
// 解析上传的数据,得到每一个表单项的FileItem
try {
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 {
// 上传的文件,获取文件的扩展名
String filename = fileitem.getFieldName();
// 这里说一下fileitem.getName()是获取文件的文件名,
// 而fileitem.getFieldName()是获取文件input中的name值
String lastname = filename.substring(filename.lastIndexOf('.'));
// filename.substring(index[,length])方法,两个参数,实现字符串分割,index分隔位置的索引
// filename需要分割的字符串,length可选参数,分割字符串的长度,默认index之后全部 System.out.println("表单项的name属性值:"+filename); String newFileName = new Date().getTime()+lastname;
// 采用时间戳保证文件名的唯一性 fileitem.write(new File("D:\\temp\\image\\"+newFileName));
}
}
} catch (FileUploadException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
} }
}
前端代码:
<!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> 需要注意的是;
该方法需要依赖两个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. git push到远程仓库

    (此处我以码云为例) 常用命令: 添加远程仓库:git remote add origin 仓库地址 (origin只是一个名字,对远程仓库的一个名字,习惯上用origin) 从仓库拉取内容:git ...

  2. 基于asp.net core 从零搭建自己的业务框架(一)

    前言 asp.net core版本选择2.2,只是因为个人习惯了vs2017,代码以及设计皆可移植到vs2019,用asp.net core 3.0以及以上运行起来 项目类似选择web api,基础设 ...

  3. 铁大树洞APP视频讲解和原型演示

    首先放上我们团队视频讲解演示的视频:https://v.youku.com/v_show/id_XNDYyMzA3MTgzNg==.html 团队名称:超能陆战队 团队成员:刘梦鑫(队长) 段行行 徐 ...

  4. Linux学习笔记之ubuntu如何在vi中写入中文注释

    点击左边设置system settings,再点击Language Suppotr 点击Remind Me Later 选择ibus 然后关闭,在终端写入ibus-setup,弹出设置框,选择INPU ...

  5. java 多态一

    一 多态的概述 现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学 生也是人,即出现两种形态. Java作为面向对象的语言,同样可以描述一个事物的多种形态.如Studen ...

  6. java流程控制语句switch

    switch 条件语句也是一种很常用的选择语句,它和if条件语句不同,它只能针对某个表达 式的值作出判断,从而决定程序执行哪一段代码. 格式: switch (表达式){ case 目标值1: 执行语 ...

  7. C#开发笔记之06-为什么要尽可能的使用尾递归,编译器会为它做优化吗?

    C#开发笔记概述 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/962 访问. 从A函数跳转到B函数,在B函数执行完毕后 ...

  8. super与this的区别,更进一步的区别!——Java学习

    文章目录 this与super的含义 前言 例证 this super 总结 this与super的含义 在Java中,this有两层含义: 指示隐式参数的引用(就是当前对象的引用) 调用该类的其他构 ...

  9. 免费深度学习GPU,Google Yes!

    深度学习越加火热,但是,很多实验室并没有配套的硬件设备,让贫穷的学生党头大 经过网上大量的搜罗,我整理了适合学生党的深度学习解决方案.利用Colab + Kaggle两大免费的GPU环境,让深度学习变 ...

  10. shazidouhui的使用体验

    这个软件有三个界面,一个是我的,一个是已批改作业,一个是未完成作业,但是,我不知道怎么用除了“我的”这个界面以外的其他两个界面,这一点还是需要优化优化,另外就是登陆界面确实还存在一点问题,有待改进.