java commons-fileupload servlet 多文件上传
commons-fileupload servlet 多文件上传
需要引入的 jar 包。
commons-fileupload-1.3.2.jar
commons-io-2.2.jar
工程路劲:查看源码
JSP 页面:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>批量上传</title>
</head>
<body>
<form name="uploadForm" method="post" action="UoloadServlet" enctype="multipart/form-data">
<table border="1">
<thead>
<tr>
<th>名称</th>
<th>文件</th>
</tr>
</thead>
<tbody>
<c:forEach begin="1" end="10" var="i">
<tr>
<td>文件${i}</td>
<td><input type="file" name="file"></td>
</tr>
</c:forEach>
</tbody>
</table>
<input type="submit" name="submit" value="开始上传">
</form>
</body>
</html>
servlet 页面
package com.servlet;
import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.util.FileUtil;
/**
* Servlet implementation class uoloadServlet
*/
public class UoloadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public UoloadServlet() {
super();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 文件上传的路径,这里设置的是服务器项目根路径下的 IMG 目录
String filePath = request.getSession().getServletContext().getRealPath("/")+ "IMG/";
// 获取照片上传工具类,并且批量上传照片文件
List<File> files = FileUtil.getInstance(filePath).upload(request);
// 将上传成功照片的照片传值到页面
request.setAttribute("files", files);
request.getRequestDispatcher("list.jsp").forward(request, response);
}
}
FileUtil.java
package com.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
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;
public class FileUtil {
// 文件上传路径
private static String UPLOAD_PATH = null;
/**
* @author Duke 静态内部类,实例化工具类
*/
private static class LazyHolder {
private static final FileUtil FILEUTIL = new FileUtil();
}
/**
* 私有构造函数
*/
private FileUtil() {
}
/**
* 获取工具类实例
*
* @return FileUploadUtil 实例
*/
public static FileUtil getInstance(String uploadPath) {
UPLOAD_PATH = uploadPath;
return LazyHolder.FILEUTIL;
}
/**
* 文件批量上传
*
* @param request
* @param uploadPath
*
*/
public List<File> upload(HttpServletRequest request) {
// 用于存放上传成功的照片
List<File> files = new ArrayList<File>();
try {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> items = upload.parseRequest(request);
for (FileItem fileItem : items) {
// 获得文件名,包括文件路径
String fileFullName = fileItem.getName();
if (fileFullName != null && fileFullName != "" && fileItem.getSize() > 0) {
// 获取文件路径
String fileName = new File(fileFullName).getName();
// 创建文件
File savedFile = new File(UPLOAD_PATH, fileName);
// 如果文件所在文件夹不存在的话,新建文件夹
if (!savedFile.getParentFile().exists()) {
savedFile.getParentFile().mkdirs();
}
// 写入文件
fileItem.write(savedFile);
files.add(savedFile);
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return files;
}
/**
* 文件下载
*
* @param filePath
* @throws IOException
* @throws Exception
*/
public void downLoadFile(String filePath, HttpServletResponse response) throws IOException {
// 处理中文乱码问题
filePath = new String(filePath.getBytes("ISO-8859-1"), "UTF-8");
downLoadFile(new File(filePath), response);
}
/**
* 文件下载
*
* @param file
* @throws IOException
*/
public void downLoadFile(File file, HttpServletResponse response) throws IOException {
if (file.exists()) {
response.reset();
response.setContentType("application/x-download");
response.addHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(file.getName(), "UTF-8"));
// 输出文件字节流
writeBufferByte(file, response);
}
}
/**
* 输出照片字节流
*
* @throws IOException
*/
public void outputImgByte(String filePath, HttpServletResponse response) throws IOException {
// 处理中文乱码问题
filePath = new String(filePath.getBytes("ISO-8859-1"), "UTF-8");
outputImgByte(new File(filePath), response);
}
/**
* 输出照片字节流
*
* @throws IOException
*/
public void outputImgByte(File file, HttpServletResponse response) throws IOException {
// 文件存在的情况下输出文件
if (file.exists()) {
// 设置相应信息的类型
response.setContentType("image/jpeg");
// 输出文件字节流
writeBufferByte(file, response);
}
}
/**
* 输出文件字节流
*
* @param file
* @param response
* @throws IOException
*/
private void writeBufferByte(File file, HttpServletResponse response) throws IOException {
// 一次读 2048 个字节
byte[] buffer = new byte[2048];
// 获取照片流
FileInputStream fos = new FileInputStream(file);
int count;
while ((count = fos.read(buffer)) > 0) {
// 输出照片流
response.getOutputStream().write(buffer, 0, count);
}
fos.close();
}
}
java commons-fileupload servlet 多文件上传的更多相关文章
- Servlet实现文件上传
一.Servlet实现文件上传,需要添加第三方提供的jar包 下载地址: 1) commons-fileupload-1.2.2-bin.zip : 点击打开链接 2) commons- ...
- Servlet实现文件上传,可多文件上传
一.Servlet实现文件上传,需要添加第三方提供的jar包 接着把这两个jar包放到 lib文件夹下: 二: 文件上传的表单提交方式必须是POST方式, 编码类型:enctype="mul ...
- jsp+servlet实现文件上传下载
相关素材下载 01.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" ...
- Java实现一个简单的文件上传案例
Java实现一个简单的文件上传案例 实现流程: 1.客户端从硬盘读取文件数据到程序中 2.客户端输出流,写出文件到服务端 3.服务端输出流,读取文件数据到服务端中 4.输出流,写出文件数据到服务器硬盘 ...
- Java 客户端操作 FastDFS 实现文件上传下载替换删除
FastDFS 的作者余庆先生已经为我们开发好了 Java 对应的 SDK.这里需要解释一下:作者余庆并没有及时更新最新的 Java SDK 至 Maven 中央仓库,目前中央仓库最新版仍旧是 1.2 ...
- 配置servlet支持文件上传
Servlet3.0为Servlet添加了multipart配置选项,并为HttpServletRequest添加了getPart和getParts方法获取上传文件.为了使Servlet支付文件上传需 ...
- Java进阶学习:将文件上传到七牛云中
Java进阶学习:将文件上传到七牛云中 通过本文,我们将讲述如何利用七牛云官方SDK,将我们的本地文件传输到其存储空间中去. JavaSDK:https://developer.qiniu.com/k ...
- 使用FileUpload实现Servlet的文件上传
简介 FileUpload 是 Apache commons下面的一个子项目,用来实现Java环境下的文件上传功能. FileUpload链接 FileUpload 是基于Apache的Commons ...
- servlet web文件上传
web文件上传也是一种POST方式,特别之处在于,需设置FORM的enctype属性为multipart/form-data. 并且需要使用文件域. servlet的代码比较关键是这几句: // 使用 ...
随机推荐
- python中遍历列表字典元组
遍历列表,打印:我叫name,今年age岁,家住dizhi,电话phone lt = [ {'name':'小王', 'age':18, 'info':[('phone', '123'), ('diz ...
- mysql经典面试题之学生成绩表
需要数据库表1.学生表 Student(SID,Sname,Sage,Ssex) --SID 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 2.课程表 Course(CID, ...
- js练习题之图片背景轮播
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- STM32 入门之 GPIO
入手STM32有一段时间了,感觉刚入门时很难,无处下手,现在学到了点皮毛,写出来和大家分享一下. 首先,什么叫GPIO?这个问题,答案是我也不知道!至少目前我没有必要知道,我只要知道他其实就是51单片 ...
- Android深度探索-卷1第六章心得体会
这章主要介绍了第一个linux驱动程序:统计单词个数.Linux系统将每一个驱动都映射成一个文件,这些文件称为设备文件或驱动文件,都保存在/dev目录中.大多数Linux驱动都有与其对应的设备文件,因 ...
- vue-router 传递参数的几种方式
本文转载自:https://blog.csdn.net/crazywoniu/article/details/80942642 vue-router传递参数分为两大类 编程式的导航 router.pu ...
- Cocos2d之FlyBird开发---简介
| 版权声明:本文为博主原创文章,未经博主允许不得转载. 开发FlyBird其实非常的简单,在游戏的核心部分,我们需要实现的只有: 创建一个物理世界(世界设置重力加速度) 在物理世界中添加一个动态 ...
- redis的set()方法参数
redis 127.0.0.1:6379> SET KEY VALUE [EX seconds] [PX milliseconds] [NX|XX] EX seconds − 设置指定的到期 ...
- 重磅!挑战Oracle,华为将开源 GaussDB 数据库
来源:中关村在线,https://dwz.cn/nHNSOTeN 有消息称在正在进行的鲲鹏计算产业论坛上,华为宣布将开源其GaussDB数据库. GaussDB数据库是今年5月15日华为公布的分布式数 ...
- java异常不匹配问题
java的异常处理是为了提高程序健壮性的. 当发生异常的时候,我们把这个异常捕获到,或者throw出去.然后对这些异常的情况进行处理.并且异常发生之后的代码仍然会执行,这样就能提高程序的健壮性.如下 ...