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 多文件上传的更多相关文章

  1. Servlet实现文件上传

    一.Servlet实现文件上传,需要添加第三方提供的jar包 下载地址: 1) commons-fileupload-1.2.2-bin.zip      :   点击打开链接 2) commons- ...

  2. Servlet实现文件上传,可多文件上传

    一.Servlet实现文件上传,需要添加第三方提供的jar包 接着把这两个jar包放到 lib文件夹下: 二: 文件上传的表单提交方式必须是POST方式, 编码类型:enctype="mul ...

  3. jsp+servlet实现文件上传下载

    相关素材下载 01.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" ...

  4. Java实现一个简单的文件上传案例

    Java实现一个简单的文件上传案例 实现流程: 1.客户端从硬盘读取文件数据到程序中 2.客户端输出流,写出文件到服务端 3.服务端输出流,读取文件数据到服务端中 4.输出流,写出文件数据到服务器硬盘 ...

  5. Java 客户端操作 FastDFS 实现文件上传下载替换删除

    FastDFS 的作者余庆先生已经为我们开发好了 Java 对应的 SDK.这里需要解释一下:作者余庆并没有及时更新最新的 Java SDK 至 Maven 中央仓库,目前中央仓库最新版仍旧是 1.2 ...

  6. 配置servlet支持文件上传

    Servlet3.0为Servlet添加了multipart配置选项,并为HttpServletRequest添加了getPart和getParts方法获取上传文件.为了使Servlet支付文件上传需 ...

  7. Java进阶学习:将文件上传到七牛云中

    Java进阶学习:将文件上传到七牛云中 通过本文,我们将讲述如何利用七牛云官方SDK,将我们的本地文件传输到其存储空间中去. JavaSDK:https://developer.qiniu.com/k ...

  8. 使用FileUpload实现Servlet的文件上传

    简介 FileUpload 是 Apache commons下面的一个子项目,用来实现Java环境下的文件上传功能. FileUpload链接 FileUpload 是基于Apache的Commons ...

  9. servlet web文件上传

    web文件上传也是一种POST方式,特别之处在于,需设置FORM的enctype属性为multipart/form-data. 并且需要使用文件域. servlet的代码比较关键是这几句: // 使用 ...

随机推荐

  1. 2018-2019-2 实验四 Android程序设计

    实验要求 参考Android开发简易教程 完成云班课中的检查点,也可以先完成实验报告,直接提交.注意不能只有截图,要有知识点,原理,遇到的问题和解决过程等说明.实验报告中一个检查点要有多张截图. 发表 ...

  2. webpack 4.+版本需要注意的地方

    在webpack打包的时候需要npm下载webpack-cli,而且打包JS的命令从以前的webpack .\src\main.js  .\dist\boundle.js 要编程 webpack .\ ...

  3. 在RedHat中安装新字体

    安装 下载这个字体. http://pan.baidu.com/s/1c23znaS 密码:tldo 在/usr/share/fonts/truetype/, 下建立一个新的目录 YaHei Cons ...

  4. 面试题57:数组中2个数的和(也是leetcode题目)

    题目:给定一个整数数列,找出其中和为特定值的那两个数. 你可以假设每个输入都只会有一种答案,同样的元素不能被重用. 示例: 给定 nums = [2, 7, 11, 15], target = 9 因 ...

  5. Selenium:多窗口切换(获取窗口句柄handle)

    我们在操作网页的时候,点击有些页面的链接,会重新打开一个窗口,我们要在新页面上操作,就得切换窗口 比如在百度首页的登录框点击注册,会重新打开一个注册的新页面,要在新页面注册,就得先切进新页面 那我们怎 ...

  6. jQuery设置checkbox 为选中状态

    1设置第一个checkbox 为选中值$('input:checkbox:first').attr("checked",'checked');或者$('input:checkbox ...

  7. python3_OS模块

    一.什么是os模块 os模块提供了多数操作系统的功能接口函数.当os模块被导入后,它会自适应于不同的操作系统平台,根据不同的平台进行相应的操作,在python编程时,经常和文件.目录打交道,所以离不了 ...

  8. SpringBoot-技术专区-异步编程

    最近在实现一个聚合搜索的需求时,由于需要从五个索引中查询数据,然后再将搜索结果组合返回给前端app展现,显然这个地方不能再用同步的方式来操作了,如果有一个索引查询出现耗时较长,那么其余的请求都会排同步 ...

  9. java 自适应响应式 网站 源码 SSM 生成 静态化 手机 平板 PC 企业站源码

    前台: 支持四套模版, 可以在后台切换 系统介绍: 1.网站后台采用主流的 SSM 框架 jsp JSTL,网站后台采用freemaker静态化模版引擎生成html 2.因为是生成的html,所以访问 ...

  10. 【记录】解决uni-app 用nginx反向代理出现Invalid Host header问题

    之前解决过一次,后来给忘记了,今天又遇到这个问题,现记录一下 修改uni-app的manifest.json文件  - >源码视图 添加以下代码: "disableHostCheck& ...