Servlet文件上传/上传文件功能的实现(commons-fileupload)

文章目录

  • 正常步骤
  • 使用 commons-fileupload.jar 实现文件上传

正常步骤

step1
在 form 中,设置 method="post",设置 enctype="multipart/form-data"。enctype 属性用于设置表单的编码方式,对于文件上传,必须设置成"multipart/form-data"。

step2
在 Servlet 类当中,不能够使用 request.getParameter() 方法来获得参数值。要使用 InputStream request.getInputStream(); 分析 InputStream 来获得参数值。直接分析 InputStream 比较复杂,一般使用一些封装好的工具(比如 Apache 提供的 commons-fileupload.jar)来获得参数值。

使用 commons-fileupload.jar 实现文件上传

Maven 作为构建工具,添加依赖:

 <dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.1</version></dependency>

FileUploadServlet 的代码:

package priv.lwx.servlet.web;import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.UUID;/*** description** @author liaowenxiong* @date 2022/2/28 19:48*/
@WebServlet("/fileupload")
public class FileUploadServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 创建DiskFileItemFactory对象,该对象为解析器提供了缺省的配置DiskFileItemFactory factory = new DiskFileItemFactory();// 创建解析器ServletFileUpload sfu = new ServletFileUpload(factory);// 使用解析器解析try {List<FileItem> items = sfu.parseRequest(req);// 遍历集合for (int i = 0; i < items.size(); i++) {FileItem fileItem = items.get(i);// 读取表单域中的数据时,要区分表单域的类型if (fileItem.isFormField()) {// 普通表单域String userName = fileItem.getString();System.out.println("userName:" + userName);} else {// 文件上传表单域ServletContext sctx = getServletContext();// 获取文件上传目标目录的路径String path = sctx.getRealPath("upload");// 会在upload的前面加上部署项目的项目根路径// 这里要构造File对象,是为了判断目录upload是否存在,不存在则创建File file = new File(path);if (!file.exists()) {file.mkdir();}// 获取文件名String fileName = fileItem.getName(); // image.jpeg/*// 截取文件的扩展名,例如:.jpegfileName = fileName.substring(fileName.lastIndexOf("."));// 自定义文件名称fileName = UUID.randomUUID().toString().replace("-", "") + fileName;System.out.println("上传到服务器后的文件名称:" + fileName);*/File file1 = new File(path + File.separator + fileName);System.out.println("上传到服务器后的文件路径:" + file1);// 将数据输出到目标文件中fileItem.write(file1);}}} catch (Exception e) {e.printStackTrace();throw new RuntimeException(e);}}
}

页面代码:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body style="font-size: 30px;">
<form action="fileupload" method="post" enctype="multipart/form-data">username:<input name="userName"/><br/>选择一个文件:<input type="file" name="file"/><br/><input type="submit" value="提交"/>
</form>
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332281.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python单行箭头_在Python中,如何让箭头尖在指定的坐标处开始/结束?

我试图使用matplotlib的注释绘制两端带有箭头的直线。但当我绘制它们时&#xff0c;箭头的尖端并没有在图中所示的指定坐标处开始或结束。提示应该从0.6和0.8开始和结束&#xff0c;但它们不是。在可复制代码import matplotlib.pyplot as pltfig plt.figure(figsize (5, 5))p…

MySQL 8.x 修改root用户密码/修改密码/重置密码/忘记密码(为了避免掉坑,值得收藏)

操作系统&#xff1a;CentOS Linux release 8.2.2004 (Core) MySQL版本&#xff1a;mysql Ver 8.0.26 for Linux on x86_64 (Source distribution) 忘记 root 用户的密码&#xff0c;然后我以无需“权限验证”的方式启动 MySQL 服务器&#xff08;具体方法参考这里&#xff09…

sql 账号查询一个表勾选那个权限_Spring Cloud微服务架构中的数据权限DataPermision实现方案...

Spring Cloud微服务架构中的数据权限DataPermision实现方案一、出现原因在Spring Cloud的微服务架构中&#xff0c;常见的权限控制除了菜单权限外&#xff0c;还有数据权限DataPermision。菜单权限主要用于控制用户角色所能访问的菜单以及页面按钮的显示与否&#xff0c;而数据…

科学计数法详解

1.4013E-45 1.4013 * 10 的 -45 次方 1.4013 * 10 的 45 次方的倒数 1.4013 * 10 的 45 次方分之一 1.4013 * 1/10 的 45 次方。 算术表达式&#xff1a;1.4013E-45 1.4013 * 10−4510^{-45}10−45 1.4013 * 11045\frac{1}{10^{45}}10451​ 1.4013 * (110)45(\frac{1}{…

程序中抛出空指针异常_从Java应用程序中消除空指针异常

程序中抛出空指针异常这篇文章简要介绍了Java 8的最有用但又“毫不夸张”的功能。 程序员花费了无尽的时间来纠正最常见但最危险的错误之一&#xff0c;即Null指针异常。 空指针异常会导致我们的应用程序意外中断&#xff0c;并且很难预先检测到。 在许多情况下&#xff0c;…

python token post403原因_Django的POST请求时因为开启防止csrf,报403错误,及四种解决方法...

Django默认开启防止csrf(跨站点请求伪造)攻击&#xff0c;在post请求时&#xff0c;没有上传 csrf字段&#xff0c;导致校验失败&#xff0c;报403错误解决方法1&#xff1a;注释掉此段代码&#xff0c;即可。缺点&#xff1a;导致Django项目完全无法防止csrf攻击解决方法2&…

BigDecimal详解

文章目录为什么要使用BigDecimal构造方法加减乘除舍入模式&#xff08;对BigDecimal进行截取&#xff09;取余数比较大小BigDecimal 转 StringBigDecimal与double和int转换格式化显示 BigDecimal使用DecimalFormat使用String.format()总结为什么要使用BigDecimal double类型的…

java序列化和反序列化_Java恶意序列化背后的历史和动机

java序列化和反序列化与Java的序列化机制相关的问题已广为人知。 有效的Java 1st Edition &#xff08;第10章&#xff09;和有效的Java 2nd Edition &#xff08;第11章&#xff09;的整个最后一章都专门讨论Java的序列化主题。 Effective Java 3rd Edition &#xff08;第12章…

python元祖迭代_如何在Python中迭代元组的堆栈

我尝试在Python中使用预定义为的DepthFirstSearch类实现DepthFirstSearch算法&#xff1a;class Stack:def __init__(self):self.list []def push(self,item):self.list.append(item)def pop(self):return self.list.pop()def isEmpty(self):return len(self.list) 0我还有一…

Request的学习笔记(属Servlet学习课程)

文章目录获取请求消息数据1.获取请求行的数据2.获取请求头的数据3.获取请求体的数据4.获取其它的数据4.1.获取请求参数的通用方式中文乱码问题4.2.请求转发4.3.共享数据4.4.获取 ServletContext 对象继承与实现体系浏览器访问服务器时&#xff0c;会将用户提交的参数数据、协议…

aws lambda_AWS Lambda事件源映射:使您的触发器混乱无序

aws lambda最近&#xff0c;我们为Sigma Cloud IDE上的无服务器项目引入了两个新的AWS Lambda事件源&#xff08;触发类型&#xff09;&#xff1a; SQS队列和DynamoDB流 。 &#xff08;是的&#xff0c;AWS在几个月前就向他们介绍了&#xff1b;但是我们仍然是一个很小的团队…

python curl模块_python pycurl模块

一、pycurl概述PycURl是一个C语言写的libcurl的python绑定库。libcurl 是一个自由的&#xff0c;并且容易使用的用在客户端的 URL 传输库。它的功能很强大&#xff0c;在PyCURL的主页上介绍的支持的功能有&#xff1a;FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE and …

MySQL数据库创建用户root@%

步骤&#xff1a; 以 rootlocalhost 登录数据库&#xff0c;即先登录数据库所在的主机&#xff0c;再以 root 用户登录数据库&#xff1a; [roothtlwk0001host ~]# mysql -uroot -p123456必须先删除原来的 root% 用户&#xff1a; mysql> drop user root%; Query OK, 0 r…

第三方工具监控java进程_前9个免费的Java进程监视工具以及如何选择一种

第三方工具监控java进程这样就可以运行Java代码了。 也许它甚至可以在生产服务器上运行。 当您做好工作后&#xff0c;我们得到了好消息和令人讨厌的消息。 令人讨厌的消息是&#xff0c;现在开始调试。 就是进行调试和应用程序性能监视。 这意味着您不仅需要查看编写的代码&a…

python中的numpy函数算相关系数_NumPy ufunc通用函数

NumPy 提供了两种基本的对象&#xff0c;即 ndarray 和 ufunc 对象。前面几节已经介绍了 ndarray&#xff0c;本节将介绍 Numpy。ufunc 是 universal function 的缩写&#xff0c;意思是“通用函数”&#xff0c;它是一种能对数组的每个元素进行操作的函数。许多 ufunc 函数都是…

MySQL 8.x 以前的版本修改密码规则

查看密码相关变量&#xff1a; mysql> show variables like validate_password%; ---------------------------------------------- | Variable_name | Value | ---------------------------------------------- | validate_password_dictionary_f…

aws mfa 认证_如何为您的AWS账户设置多因素身份验证(MFA)

aws mfa 认证第1步 &#xff1a; 转到AWS控制台并使用您的用户名密码登录。 第2步 &#xff1a; 转到服务-> IAM 第三步&#xff1a; 单击您的根帐户上的激活MFA 第4步 &#xff1a; 在步骤3中&#xff0c;点击屏幕上的管理MFA按钮。 步骤5&#xff1a; 单击分配…

python具体工作内容_有没有人知道公司里用python工作的内容有什么

2018-07-11 回答python的特色 简单 python是一种代表简单主义思想的语言。阅读一个良好的python程序就感觉像是在读英语一样&#xff0c;尽管这个英语的要求非常严格&#xff01;python的这种伪代码本质是它最大的优点之一。它使你能够专注于解决问题而不是去搞明白语言本身。 …

如何导入hadoop源码到eclipse

需要进一步学习hadoop、需要看看内部源码实现&#xff0c;因此需要将hadoop源码导入都eclipse中。 简单总结一下&#xff0c;具体步骤如下&#xff1a; 首先确保已经安装了git、maven3、protobuf2.5、如果没有安装需要提前安装一下 0、preliminary linux distribution(我的…

线程池的学习

文章目录线程池原理JDK 1.5 之后提供的线程池工厂类线程池的使用步骤线程池原理 1.创建多个线程对象&#xff0c;存放到集合中&#xff0c;集合可以是 ArrayList 或者 LinkedList 2.从集合中取出一个线程对象&#xff0c;执行指定的任务 3.一个线程对象只能执行一个任务&#…