java 支持 超大上G , 多附件上传
首先 确定要上传的目录
WEB.XML 文件
- <listener>
- <listener-class><!-- 临时文件收集器 , 支持超大附件必须项 -->
- org.apache.commons.fileupload.servlet.FileCleanerCleanup
- </listener-class>
- </listener>
- <context-param>
- <param-name>tempXlsPath</param-name><!-- 要上传的目录 -->
- <param-value>/WEB-INF/temp/</param-value>
- </context-param>
- <servlet>
- <servlet-name>UploadServlet</servlet-name>
- <servlet-class>
- com.thams.web.fileServlet.UploadServlet
- </servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>UploadServlet</servlet-name>
- <url-pattern>/servlet/UploadServlet</url-pattern>
- </servlet-mapping>
servlet
- package com.thams.web.fileServlet;
- import java.io.File;
- import java.io.IOException;
- import java.util.List;
- import javax.servlet.ServletContext;
- 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.FileUploadException;
- import org.apache.commons.fileupload.disk.DiskFileItemFactory;
- import org.apache.commons.fileupload.servlet.FileCleanerCleanup;
- import org.apache.commons.fileupload.servlet.ServletFileUpload;
- import org.apache.commons.io.FileCleaningTracker;
- import org.apache.commons.io.FilenameUtils;
- import org.apache.log4j.Logger;
- /**
- * @author serv
- */
- public class UploadServlet extends HttpServlet {
- private static Logger log = Logger.getLogger(UploadServlet.class);
- protected void service(HttpServletRequest request,
- HttpServletResponse response) throws ServletException, IOException {
- response.setContentType("text/html;charset=UTF-8");
- // Check that we have a file upload request
- boolean isMultipart = ServletFileUpload.isMultipartContent(request);
- if (!isMultipart) {
- log.debug("没有可上传的文件, 你想干什么 !");
- return;
- }
- // Create a factory for disk-based file items
- String tempFilePath = getServletContext().getRealPath("/")+getServletContext().getInitParameter("tempXlsPath");
- FileItemFactory factory = newDiskFileItemFactory(getServletContext(), new File(tempFilePath));
- // Create a new file upload handler
- ServletFileUpload upload = new ServletFileUpload(factory);
- upload.setHeaderEncoding("UTF-8");
- /* FileItem */
- List<FileItem> items = null;
- try {
- // Parse the request
- items = (List<FileItem>) upload.parseRequest(request);
- String filename = null;
- for (FileItem fileItem : items) {
- if (!fileItem.isFormField()){//file
- filename = FilenameUtils.getName(fileItem.getName());
- fileItem.write(new File(tempFilePath+filename));
- response.getWriter().write(tempFilePath+filename+"<br>");
- }
- }
- } catch (FileUploadException e) {
- log.error(e.getMessage());
- } catch (Exception e) {
- log.error(e.getMessage());
- }
- }
- /**
- * The FileCleanerCleanup provides an instance of org.apache.commons.io.FileCleaningTracker.
- * This instance must be used when creating a org.apache.commons.fileupload.disk.DiskFileItemFactory.
- */
- public static DiskFileItemFactory newDiskFileItemFactory(
- ServletContext context, File repository) {
- FileCleaningTracker fileCleaningTracker = FileCleanerCleanup
- .getFileCleaningTracker(context);
- DiskFileItemFactory factory = new DiskFileItemFactory(
- DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD, repository);
- factory.setFileCleaningTracker(fileCleaningTracker);
- return factory;
- }
- }
测试页面
- <form action="servlet/UploadServlet" method="post" enctype="multipart/form-data">
- <input id="file1" name="file1" type="file" class="input400"><br>
- <input id="file2" name="file2" type="file" class="input400"><br>
- <input id="file3" name="file3" type="file" class="input400"><br>
- <input id="file4" name="file4" type="file" class="input400"><br>
- <input type="submit" id="submit" value="提交" />
- </form>
测试结果

页面输出:

文件上传完成。
DEMO下载地址:https://dwz.cn/fgXtRtnu
java 支持 超大上G , 多附件上传的更多相关文章
- HTTP文件上传服务器-支持超大文件HTTP断点续传的实现办法
最近由于笔者所在的研发集团产品需要,需要支持高性能的大文件http上传,并且要求支持http断点续传.笔者在以前的博客如何实现支持大文件的高性能HTTP文件上传服务器已经介绍了实现大文件上传的一些基本 ...
- java 附件上传、下载前后端代码
前言:业务需要:附件上传,需要同时满足浏览器上传,和APP上传附件,并且浏览器端不可使用form表单提交,因为表单提交无法直接获取返回值,除非刷新页面才可显示上传的附件.所以此处使用ajaxfileu ...
- Java内存映射,上G大文件轻松处理
内存映射文件(Memory-mapped File),指的是将一段虚拟内存逐字节映射于一个文件,使得应用程序处理文件如同访问主内存(但在真正使用到这些数据前却不会消耗物理内存,也不会有读写磁盘的操作) ...
- java附件上传下载磁盘版
ACTION public class UploadAction extends BaseAction { private static final long serialVersionUID = 1 ...
- Springmvc file多附件上传 显示 删除操作
之前项目需求要做一个多附件上传 并显示上传文件 带删除操作 一筹莫展之际搜到某个兄弟发的博客感觉非常好用被我copy下来了此贴算是改良版 再次感谢(忘记叫什么了时间也有点久没有历史记录了)先上图 基于 ...
- asp.net结合uploadify实现多附件上传
1.说明 uploadify是一款优秀jQuery插件,主要功能是批量上传文件.大多数同学对多附件上传感到棘手,现将asp.net结合uploadfiy如何实现批量上传附件给大家讲解一下,有什么不对的 ...
- 基于MVC4+EasyUI的Web开发框架形成之旅--附件上传组件uploadify的使用
大概一年前,我还在用Asp.NET开发一些行业管理系统的时候,就曾经使用这个组件作为文件的上传操作,在随笔<Web开发中的文件上传组件uploadify的使用>中可以看到,Asp.NET中 ...
- 使用plupload做一个类似qq邮箱附件上传的效果
公司项目中使用的框架是springmvc+hibernate+spring,目前需要做一个类似qq邮箱附件上传的功能,暂时只是上传小类型的附件 处理过程和解决方案都需要添加附件,处理过程和解决方案都可 ...
- JS实现多附件上传(asp.net)
前几天,用户提出一个需求-多附件上传,另外,每个上传文件要加一个别名,本人创新少,从网上收集了资料,稍微改写,满足了 客户的需求.在应用到程序之前,先做了个小测试,测试通过,小高兴,就记录下了这个小测 ...
随机推荐
- Java笔试面试题整理第四波
转载至:http://blog.csdn.net/shakespeare001/article/details/51274685 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...
- element-vue-koa2-mysql实现文件上传
友情提示:这篇博客不会详细说明搭建过程 阅读群体建议:第一次使用node或者koa2写文件上传或者下载,因为你不知道用fs的哪个方法,我也是从fs里试水试了一天,各种百度才搞出来的,特别学过java的 ...
- solr字段压缩属性compressed新版本已经移除
solr字段压缩属性compressed新版本已经移除 可能是考虑到压缩意义不大还减少搜索效率,所以去掉了.而且好像没有替代属性.
- maven的依赖管理详细
依赖管理 Jar包的管理 需求:整合struts2 页面上传一个客户id 跳转页面 1 添加依赖: 打开maven仓库的视图: 2 重建索引 1. 创建maven项目(同上) 2. 跳过骨架(同上 ...
- nginx+python+windows 开始
参考文章:http://www.testwo.com/article/311 参考如上文章基本能够完成hello world示例,我来记录下自己操作步骤及不同点,用以备忘,如果能帮助到其他人更好. 以 ...
- python3 列表去除重复项保留原序
l1 = ['a',1,'c','b',2,'b','c','d','a'] l2= sorted(set(l1),key=l1.index) print('l2:',l2) print('l1:', ...
- java的反射机制之getDeclaredMethods和getMethods的区别
getMethods() 返回一个包含某些 Method 对象的数组,这些对象反映此 Class 对象所表示的类或接口(包括那些由该类或接口声明的以及从超类和超接口继承的那些的类或接口)的公共 me ...
- leetcode3
public class Solution { public int LengthOfLongestSubstring(string s) { var dic = new Dictionary< ...
- django不定义model,直接执行自定义SQL
如果不想定义model,直接执行自定义SQL,可如下操作: 1. 通过 connections获取db连接,如果是多个数据库,connections['dbName'] 来选择 2. 获取游标 cur ...
- c#随机生成英文名
private static string GenerateSurname() { string name = string.Empty; string[] currentConson ...