servlet 通过 FileItem 实现多文件上传
【本文简介】
一个servlet 多文件上传的简单例子。
【依赖包】
- commons-fileupload-1.3.1.jar
- commons-io-2.2.jar
【依赖包下载】
- commons-fileupload-1.3.1.jar:http://commons.apache.org/proper/commons-fileupload/download_fileupload.cgi
- commons-io-2.2.jar:http://commons.apache.org/proper/commons-io/download_io.cgi
【文件夹结构】

【HTML表单】
<body>
<form action="UploadServlet" method="post" enctype="multipart/form-data">
<input name="file" type="file" />
<input name="file" type="file" />
<input type="submit" value="上传"/>
</form>
</body>
【java代码】
package com.zjm.www.servlet; import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload; /**
* @描述 servlet 通过 FileItem 实现多文件上传
* @作者 小M
* @博客 http://www.cnblogs.com/xiaoMzjm/
* @时间 2014/07/30
*/
public class UploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
} @SuppressWarnings("unchecked")
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { // 转码,建议使用过滤器转码
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8"); // 判断提交过来的表单是否为文件上传菜单,只适用于servlet
boolean isMultipart = ServletFileUpload.isMultipartContent(request); if (isMultipart) {
// 构造一个文件上传处理对象
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory); Iterator<FileItem> items; try {
// 解析表单中提交的所有文件内容
items = upload.parseRequest(request).iterator(); while (items.hasNext()) { FileItem item = (FileItem) items.next(); if (!item.isFormField()) { // 取出上传文件的文件名称
String name = item.getName(); // 取得上传文件以后的存储路径
String fileName = name.substring(
name.lastIndexOf('\\') + 1, name.length()); // 上传文件以后的存储路径 , 有关路径问题,请参考另一篇博文:http://www.cnblogs.com/xiaoMzjm/p/3878758.html
String path = request.getServletContext().getRealPath("/")+"\\UpLoadFile"
+ File.separatorChar + fileName; // 上传文件
File uploaderFile = new File(path);
item.write(uploaderFile); // 打印上传成功信息
PrintWriter out = response.getWriter();
out.print("success");
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
servlet 通过 FileItem 实现多文件上传的更多相关文章
- 2020最新Servlet+form表单实现文件上传(图片)
servlet实现文件上传接受 这几天学了一点文件上传,有很多不会,在网查了许多博客,但是最新的没有,都比较久了 因为我是小白,版本更新了,以前的方法自己费了好久才弄懂,写个随笔方便以后查找 代码奉上 ...
- Servlet中使用getInputStream进行文件上传
据说古老了点,所以代码比较繁琐,主要用于处理文件的地方太多. 下节用SERVLET3.0的Part进行操作一下. form.html: <!DOCTYPE html> <html&g ...
- 与文件上传到的三个类:FileItem类、ServletFileUpload 类、DiskFileItemFactory类
文件上传: ServletFileUpload负责处理上传的文件数据,并将表单中每个输入项封装成一个FileItem对象中, 在使用ServletFileUpload对象解析请求时需要根据DiskFi ...
- 文件上传: FileItem类、ServletFileUpload 类、DiskFileItemFactory类
文件上传: ServletFileUpload负责处理上传的文件数据,并将表单中每个输入项封装成一个FileItem对象中, 在使用ServletFileUpload对象解析请求时需要根据DiskFi ...
- java commons-fileupload servlet 多文件上传
commons-fileupload servlet 多文件上传 需要引入的 jar 包. commons-fileupload-1.3.2.jar commons-io-2.2.jar 工程路劲:查 ...
- Java Servlet异步处理、非阻塞I/O和文件上传
异步处理 应用服务器中的 web容器通常对各个客户端情求分别使用一个服务器线程.在工作负载很繁重的情况下,容器常要大量线程来为所有客户端请求服务.可扩展性限制包括内存用尽,或容器线程池耗尽.为了创建可 ...
- JavaEE系列之(二)commons-fileupload实现文件上传、下载
一.文件上传概述 实现Web开发中的文件上传功能,需要两步操作: 1.在Web页面中添加上传输入项 <form action="#" method=" ...
- 20160420javaweb之文件上传和下载
一.文件上传 1.提供表单允许用户通过表单选择文件进行上传 表单必须是POST提交 文件输入框必须有name属性,只有有name属性的输入项浏览器才会进行提交 需要设置enctype属性值为multi ...
- android批量文件上传(android批量图片上传)
项目中多处用到文件批量上传功能,今天正好解决了此问题,在此写出来,以便日后借鉴. 首先,以下架构下的批量文件上传可能会失败或者不会成功: 1.android客户端+springMVC服务端:服务端 ...
随机推荐
- CCNA2.0笔记_VTP
VTP(VLAN Trunking Protocol) 一个能够宣告VLAN配置信息的信息系统: 通过一个共有的管理域,维持VLAN配置信息的一致性: VTP只能在trunk端口发送要宣告的信息: 二 ...
- 使用java语言如何更好的使用多线程?
① 高并发.任务执行时间短的业务,线程池线程数可以设置为CPU核数+1,减少线程上下文的切换. ② 并发不高.任务执行时间长的业务要区分开看: 假如是业务时间长集中在I/O操作上,也就是I/O密集型的 ...
- mysql update语句添加表关联查询
UPDATE tab_game_version as a INNER JOIN tab_game_version as b ON a.id=b.idSET a.advert_data=0 where ...
- 爬虫 (5)- Scrapy 框架简介与入门
Scrapy 框架 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页 ...
- idea编译修改jdk版本
由于项目需要,需要修改jdk的版本为1.8,这里记录一下修改的地方 1,项目的jdk版本 右键点击项目-> open module setting ->project,然后如图所示 2,在 ...
- java语言中public、private、protected三个关键字的用法,重写和重载的区别。
java语言中public.private.protected三个关键字的用法,重写和重载的区别. 解答: 作用域 当前类 同包 子类 其它 public √ √ √ √ protected √ √ ...
- 【BZOJ】1596: [Usaco2008 Jan]电话网络(树形dp+特殊的技巧)
http://www.lydsy.com/JudgeOnline/problem.php?id=1596 一开始交了个貌似正确的dp,wa了. 我只考虑了儿子覆盖的情况,没有考虑父亲QAQ 那么我们要 ...
- kafka1:Kafka集群部署步骤
参考: kafka 集群--3个broker 3个zookeeper创建实战 细细品味Kafka_Kafka简介及安装_V1.3http://www.docin.com/p-1291437890.ht ...
- 详解ASP.NET提取多层嵌套json数据的方法
本篇文章主要介绍了ASP.NET提取多层嵌套json数据的方法,利用第三方类库Newtonsoft.Json提取多层嵌套json数据的方法,有兴趣的可以了解一下. 本文实例讲述了ASP.NET利用第三 ...
- <input>type类型
当Input框需要输入数字时,一般用到type='number' 但是在输入框有 上下小箭头 google后有解决CSS方案 在chrome下: input::-webkit-outer-spin-b ...