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. linux的用户扩充权限管理acl和用户使用系统资源的限制

    用户扩充权限管理 acl 1.扩充权限的方式 文件扩充权限 ACL 磁盘配额 2.文件扩充权限 1.安全位 安全位   ---set位    SUID  SGID   set仅可以加给 u.g, 如: ...

  2. 关于双线性插值中重叠像素与空白像素掩膜函数的一种迭代batch的写法

    from __future__ import division import matplotlib.pyplot as plt import numpy as np import tensorflow ...

  3. ubuntu18.04右键怎么添加新建空白文本文件

    安装好ubuntu18.04发现右键菜单中没有新建空白文件了,这样工作的时候需要创建文本文件就不是很方便了,这里我们就可以通过以下的方式把新建空白文件添加到右键 解决办法: 1.打开文件夹,在用户主目 ...

  4. Spring MVC method POST no supported

    首先:一些隐含的知识点要知道 POST 的不支持对静态资源的访问[默认情况下是这样,个人不太了解,仅总结大概思路],如果是post 而响应的是个静态资源,则很多情况下出现这种错误 因此在使用POST应 ...

  5. IntelliJ IDEA 修改内存大小,使得idea运行更流畅。(转发)

    原文地址:https://blog.csdn.net/qq_27093465/article/details/81947933 idea有个配置文件,可以设置内存大小的,就跟咱的jvm的内存里面的堆大 ...

  6. nvidia-smi:控制您的GPU

    翻译  https://www.microway.com/hpc-tech-tips/nvidia-smi_control-your-gpus/ 大多数用户知道如何检查其CPU的状态,查看多少系统内存 ...

  7. aria2使用ajax调用/页面浏览器RPC调用aria2

    @ 目录 1. aria2使用ajax调用/页面浏览器RPC调用aria2 1.1. 总结: 1.2. ajax调用aria2-Demo 1.3. postMan命令测试 1.3.1. post基本使 ...

  8. Azure DevOps+Docker+Asp.NET Core 实现CI/CD(一 .简介与创建自己的代理池)

    前言 本文主要是讲解如何使用Azure DevOps+Docker 来实现持续集成Asp.NET Core项目(当然 也可以是任意项目). 打算用三个篇幅来记录完整的全过程 觉得有帮助的朋友~可以左上 ...

  9. CSS漂亮盒子(下)

    4.多重背景 CSS支持一个元素设置多个背景图片. 每个背景属性有相应的多值语法,多个值由逗号分隔. .multi-bg-shorthand { width: 300px; height: 200px ...

  10. 推荐:pyqt5入门教程

    版权声明:本文为CSDN博主「AzureMouse」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/azure ...