- 浏览: 374501 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
angryid:
dsafddsfssssssssddsdsasssssssss ...
freemarker学习笔记---assign标签 -
lylovejava0:
数据库里字段不能转换。。这样会慢死。。在说如果表里有分区等设置 ...
Oracle 时间段查询 -
greatjone:
必须得评论下,这篇博文相当实用,在csdn上找个东西老还要积分 ...
MyEclipse下安装jad插件 -
mytream:
...
模拟tomcat工作原理 -
liujianche11:
小心点 createdate<=to_date('20 ...
Oracle 时间段查询
最近在用commons-fileupload做文件上传的时候遇到了一点小的麻烦,不过最终在学友的帮助下解决,在写之前先说明一下几个错误,在群里面问了上传页面中file选择框的name是否可以相同,很多人说name是不能相同的,不然就不知道是哪个上传的了,这种理解是错误的:
普通表单项name可以相同,在后台接收的时候就用String[],而且在Struts2中我们也看到,在页面中相同名字的file框 name在Action中用File[] 接收,通过这两点分析,以及之后的实验发现,name完全可以相同,下面的FileItem分析 也可以说明这一点
先贴一下FileUpload的工具类,这是做了一个封装:
import java.io.File; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.TreeMap; import javax.servlet.http.HttpServletRequest; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUpload; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class FileUploadUtil { private Map fileField = new TreeMap(); private Map formField = new TreeMap(); private List<FileItem> list=new ArrayList<FileItem>(); private int memoryBlock = 2048; private File tempFolder = null; private boolean multipart = false; private HttpServletRequest request = null; private final int maxSize = (int) Common.getByteSizeByBKMG(JavaCenterHome.jchConfig.get("upload_max_filesize")); public FileUploadUtil(File tempFolder, int memeoryBlock) { this.tempFolder = tempFolder; this.memoryBlock = memeoryBlock; } public FileUploadUtil() { } public void parse(HttpServletRequest request, String charset) throws FileUploadException { this.request = request; multipart = FileUpload.isMultipartContent(request); if (multipart) { DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setSizeThreshold(memoryBlock); factory.setRepository(tempFolder); ServletFileUpload upload = new ServletFileUpload(factory); upload.setSizeMax(maxSize); List items; items = upload.parseRequest(request); Iterator iterator = items.iterator(); while (iterator.hasNext()) { FileItem item = (FileItem) iterator.next(); if (item.isFormField()) { processFormField(item, charset); } else { processUploadedFile(item); } } } } private void processFormField(FileItem item, String charset) { try { String name = item.getFieldName(); String value = item.getString(charset); Object objv = formField.get(name); if (objv == null) { formField.put(name, value); } else { List values = null; if (objv instanceof List) { values = (List) objv; values.add(value); } else { String strv = (String) objv; values = new ArrayList(); values.add(strv); values.add(value); } formField.put(name, values); } } catch (UnsupportedEncodingException e) { throw new IllegalArgumentException("the argument \"charset\" missing!"); } } private void processUploadedFile(FileItem item) { String name = item.getFieldName(); long size=item.getSize(); if(size>0) list.add(item); fileField.put(name, list); } public static boolean write2file(FileItem item, File file) { boolean flag = false; try { item.write(file); flag = true; } catch (Exception e) { } return flag; } public List<FileItem> getFileItemList(String name) { if (multipart) { return (List<FileItem>) fileField.get(name); } else { return null; } } public String getParameter(String name) { String value = null; if (multipart) { Object obj = formField.get(name); if (obj != null && obj instanceof String) { value = (String) obj; } } else if (request != null) { value = request.getParameter(name); } return value; } public String[] getParameterValues(String name) { String[] values = null; if (multipart) { Object obj = formField.get(name); if (obj != null) { if (obj instanceof List) { values = (String[]) ((List) obj).toArray(new String[0]); } else { values = new String[] {(String) obj}; } } } else if (request != null) { values = request.getParameterValues(name); } return values; } public File getRepository() { return this.tempFolder; } public int getSizeThreshold() { return this.memoryBlock; } public boolean isMultipart() { return this.multipart; } public int getMaxSize() { return maxSize; } }
这个工具类有改动,之前没考虑到多文件上传,在Map只是这样存:
String name = item.getFieldName(); fileField.put(name, item);
这样有二点缺点:
1、如果name相同的话,前面上传的文件就会被后面上传的文件覆盖
2、如果上传文件的size为0,并且在最后面,那么最终fileFiled存放的是一个size为0的FilteItem这显然是无效的
上面最后改进后,对于多文件上传也可以起作用了。
下面来分析一下,这句话后,items中存的东西是怎样的:
List items; items = upload.parseRequest(request);
上面的意思是解析request,下面来看在我项目中一个表单提交后得到的装有FileItem的List
[name=null, StoreLocation=D:\Tomcat 6.0.20\webapps\JavaCenterHome\.\data\temp\upload_365228b4_12f048b1396__8000_00000054.tmp, size=1bytes, isFormField=true, FieldName=productcategory_id, name=null, StoreLocation=D:\Tomcat 6.0.20\webapps\JavaCenterHome\.\data\temp\upload_365228b4_12f048b1396__8000_00000055.tmp, size=0bytes, isFormField=true, FieldName=self_type_id, name=null, StoreLocation=D:\Tomcat 6.0.20\webapps\JavaCenterHome\.\data\temp\upload_365228b4_12f048b1396__8000_00000056.tmp, size=0bytes, isFormField=true, FieldName=brand_id, name=null,StoreLocation=D:\Tomcat 6.0.20\webapps\JavaCenterHome\.\data\temp\upload_365228b4_12f048b1396__8000_00000057.tmp, size=18bytes, isFormField=true, FieldName=name, name=null, StoreLocation=D:\Tomcat 6.0.20\webapps\JavaCenterHome\.\data\temp\upload_365228b4_12f048b1396__8000_00000058.tmp, size=2bytes, isFormField=true, FieldName=productsn, name=null, StoreLocation=D:\Tomcat 6.0.20\webapps\JavaCenterHome\.\data\temp\upload_365228b4_12f048b1396__8000_00000059.tmp, size=1bytes, isFormField=true, FieldName=price, name=null, StoreLocation=D:\Tomcat 6.0.20\webapps\JavaCenterHome\.\data\temp\upload_365228b4_12f048b1396__8000_00000060.tmp, size=1bytes, isFormField=true, FieldName=marketprice, name=null, StoreLocation=D:\Tomcat 6.0.20\webapps\JavaCenterHome\.\data\temp\upload_365228b4_12f048b1396__8000_00000061.tmp, size=1bytes, isFormField=true, FieldName=weight, name=null, StoreLocation=D:\Tomcat 6.0.20\webapps\JavaCenterHome\.\data\temp\upload_365228b4_12f048b1396__8000_00000062.tmp, size=1bytes, isFormField=true, FieldName=weightunit, name=null, StoreLocation=D:\Tomcat 6.0.20\webapps\JavaCenterHome\.\data\temp\upload_365228b4_12f048b1396__8000_00000063.tmp, size=1bytes, isFormField=true, FieldName=base_sale_num, name=null, StoreLocation=D:\Tomcat 6.0.20\webapps\JavaCenterHome\.\data\temp\upload_365228b4_12f048b1396__8000_00000064.tmp, size=1bytes, isFormField=true, FieldName=product_unit, name=null, StoreLocation=D:\Tomcat 6.0.20\webapps\JavaCenterHome\.\data\temp\upload_365228b4_12f048b1396__8000_00000065.tmp, size=1bytes, isFormField=true, FieldName=store, name=http_imgloadCAEP58ES.jpg, StoreLocation=D:\Tomcat 6.0.20\webapps\JavaCenterHome\.\data\temp\upload_365228b4_12f048b1396__8000_00000066.tmp, size=141869bytes, isFormField=false, FieldName=productImages, name=null, StoreLocation=D:\Tomcat 6.0.20\webapps\JavaCenterHome\.\data\temp\upload_365228b4_12f048b1396__8000_00000067.tmp, size=16bytes, isFormField=true, FieldName=productImageParameterTypes, name=http_imgloadCAFH1MHX.jpg, StoreLocation=D:\Tomcat 6.0.20\webapps\JavaCenterHome\.\data\temp\upload_365228b4_12f048b1396__8000_00000068.tmp, size=70138bytes, isFormField=false, FieldName=productImages, name=null, StoreLocation=D:\Tomcat 6.0.20\webapps\JavaCenterHome\.\data\temp\upload_365228b4_12f048b1396__8000_00000069.tmp, size=16bytes, isFormField=true, FieldName=productImageParameterTypes, name=, StoreLocation=D:\Tomcat 6.0.20\webapps\JavaCenterHome\.\data\temp\upload_365228b4_12f048b1396__8000_00000070.tmp, size=0bytes, isFormField=false, FieldName=productImages, name=null, StoreLocation=D:\Tomcat 6.0.20\webapps\JavaCenterHome\.\data\temp\upload_365228b4_12f048b1396__8000_00000071.tmp, size=44bytes, isFormField=true, FieldName=description, name=null, StoreLocation=D:\Tomcat 6.0.20\webapps\JavaCenterHome\.\data\temp\upload_365228b4_12f048b1396__8000_00000072.tmp, size=0bytes, isFormField=true, FieldName=producttype_id, name=null, StoreLocation=D:\Tomcat 6.0.20\webapps\JavaCenterHome\.\data\temp\upload_365228b4_12f048b1396__8000_00000073.tmp, size=1bytes, isFormField=true, FieldName=valid_date, name=null, StoreLocation=D:\Tomcat 6.0.20\webapps\JavaCenterHome\.\data\temp\upload_365228b4_12f048b1396__8000_00000074.tmp, size=1bytes, isFormField=true, FieldName=ismarketable, name=null, StoreLocation=D:\Tomcat 6.0.20\webapps\JavaCenterHome\.\data\temp\upload_365228b4_12f048b1396__8000_00000075.tmp, size=1bytes, isFormField=true, FieldName=isbest, name=null, StoreLocation=D:\Tomcat 6.0.20\webapps\JavaCenterHome\.\data\temp\upload_365228b4_12f048b1396__8000_00000076.tmp, size=1bytes, isFormField=true, FieldName=isnew, name=null, StoreLocation=D:\Tomcat 6.0.20\webapps\JavaCenterHome\.\data\temp\upload_365228b4_12f048b1396__8000_00000077.tmp, size=1bytes, isFormField=true, FieldName=ishot, name=null, StoreLocation=D:\Tomcat 6.0.20\webapps\JavaCenterHome\.\data\temp\upload_365228b4_12f048b1396__8000_00000078.tmp, size=0bytes, isFormField=true, FieldName=metakeywords, name=null, StoreLocation=D:\Tomcat 6.0.20\webapps\JavaCenterHome\.\data\temp\upload_365228b4_12f048b1396__8000_00000079.tmp, size=0bytes, isFormField=true, FieldName=metadescription, name=null, StoreLocation=D:\Tomcat 6.0.20\webapps\JavaCenterHome\.\data\temp\upload_365228b4_12f048b1396__8000_00000080.tmp, size=8bytes, isFormField=true, FieldName=formhash, name=null, StoreLocation=D:\Tomcat 6.0.20\webapps\JavaCenterHome\.\data\temp\upload_365228b4_12f048b1396__8000_00000081.tmp, size=0bytes, isFormField=true, FieldName=id, name=null, StoreLocation=D:\Tomcat 6.0.20\webapps\JavaCenterHome\.\data\temp\upload_365228b4_12f048b1396__8000_00000082.tmp, size=1bytes, isFormField=true, FieldName=productsubmit]
上面每一行就是一个FiteItem中的内容,也就是说使用commons-fileupload上传组件后,对于表单中的每一项它都会解析后构造成一个个的FileItem,我们只要操作这写FileItem就行了。
发表评论
-
Java内存分析工具
2012-01-17 10:45 1561Java运行时数据区包含 ... -
中文乱码问题案例分析
2011-10-14 12:50 1853案例: 1、 环境介绍: 项目 ... -
button在Firefox下点击提交表单(form)的问题
2011-09-21 10:33 1148【关键词】Button Form FireFox ... -
模拟tomcat工作原理
2011-07-28 13:10 1078httpserver原理:服务器端 打开一个socket,一直 ... -
EL表达式中empty的用法
2011-07-07 17:07 2444在做jsp系统的时候经常会使用el标签,而empty ... -
解决TOMCAT控制台输出 “Parameters: Invalid chunk ignored.”
2011-07-05 13:27 1201用过tomcat的都知道,request参数中如果有程 ... -
if 和 else if
2011-06-20 11:23 776最近做项目碰到服务器端验证用到了大量的if语句,首先不 ... -
java枚举类详解
2011-06-16 13:05 1471JDK1.6增添了一些新的特性,其中枚举就是其中比较重要 ... -
Java正则表达式的使用
2011-05-20 10:01 657import java.util.regex.Matcher; ... -
Cookie的MaxAge属性及其使用
2011-05-07 01:14 5822首先,看看API文档中对M ... -
根据不同情况提交表单
2011-05-05 10:29 1103在项目开发的过程中经常涉及到表单提交的问题,为了使得 ... -
Jsp传递中文参数详解
2011-05-01 17:39 923目前在jsp页面中传递中文参数,主要有两种方式: ... -
java.math.BigDecimal的用法
2011-04-18 15:34 1214Java中的简单浮点数类型float和double不能够进行 ... -
存储基础知识:数据一致性
2011-04-18 11:00 1593一、概述 数据一致性是指关联数据之间的逻辑关系是否正确和完整 ... -
java 检查 URL 合法性
2011-04-15 10:19 4794/** * URL检查& ... -
关于用SimpleDateFormat进行日期格式化的问题
2011-04-01 13:45 1022做了遮掩一个实验: public static vo ... -
深入Java对象的比较
2011-03-31 18:22 1387深入Java对象的比较 ... -
Web上传文件的原理及实现[转]
2011-03-30 02:48 1012现在有很多 Web程序都有上传功能,实现上传功能的组件 ... -
java保留两位小数
2011-03-29 18:23 1054java保留两位小数问题: 方式一: ... -
RequestDispatcher接口中的include()方法和forward()方法的区别
2011-03-24 23:12 1362请求转发中 RequestDispatcher 接口中的 ...
相关推荐
【基于commons-fileupload组件的上传下载】是一种在J2EE环境下处理文件上传和下载功能的技术。这个组件是Apache Commons项目的一部分,提供了强大的文件上传能力,适用于JSP和Servlet应用程序。以下将详细介绍如何...
在SSM中,文件上传通常涉及前端页面(由Struts处理)将文件传递给后端服务器(Spring控制),而 Commons FileUpload 和 Commons IO 就是处理这一过程的关键组件。 关于压缩包子文件的文件名称列表 "ssm_...
Common-FileUpload是Apache Commons项目的一部分,提供了强大的文件上传功能。下面将详细探讨这两个知识点。 首先,我们来看Struts2的拦截器。Struts2的拦截器是一种AOP(面向切面编程)的概念,它们在Action调用...
在使用 Apache Commons FileUpload 进行文件上传之前,你需要确保以下组件已经准备就绪: 1. **引入依赖**:首先,你需要下载并添加 `org.apache.commons.io` 和 `log4j` 的 JAR 包到你的项目类路径中。在本例中,`...
总的来说,"编码实现图片上传"是一个涵盖前端交互、后端处理、文件操作和数据库交互的综合过程,而Apache Commons FileUpload组件则为这一过程提供了强大的支持。理解并熟练掌握这一流程,对于任何Web开发者来说都是...
本主题将详细讲解如何使用`Commons FileUpload`组件实现JSP中的文件上传功能,该组件是Apache Commons项目的一部分,提供了强大的文件上传处理能力。 `Commons FileUpload`是一个专门处理HTTP请求中多部分数据的库...
7. **commons-fileupload-1.3.1.jar**:这个库专门处理HTTP请求中的文件上传,提供了处理文件上传的组件,支持多部分/混合上传,是构建Web应用时处理用户上传文件的关键工具。 8. **commons-logging-1.2.jar**:...
`FileUpload` JSP上传下载组件就是为此目的设计的。它允许用户通过浏览器将文件发送到服务器,同时也能提供文件的下载服务。在这个过程中,我们将探讨`FileUpload`组件的工作原理、如何集成到JSP项目中以及具体的...
### FileUpload组件使用方法详解 ...通过以上步骤,我们已经完成了使用Commons FileUpload组件进行文件上传的基本配置和实现。这不仅简化了文件上传的操作流程,还提高了应用程序的安全性和稳定性。
commons-fileupload-1.2.1.jar:文件上传组件,2.1.6版本后必须加入此文件 commons-io-1.3.2.jar freemarker-2.3.15.jar:Struts 2的UI标签的模板 ognl-2.7.3.jar :对象图导航语言(Object Graph Navigation ...
通过使用`commons-fileupload`处理上传请求,`commons-io`进行文件操作,以及`commons-logging`进行日志记录,可以高效、稳定地实现文件上传功能,同时保持代码的可维护性和扩展性。 在实际开发中,我们可以创建一...
Apache Commons项目提供了一系列工具,其中包括一个用于处理文件上传的组件,能够帮助开发者实现文件上传进度条的功能,从而提升用户体验。 Apache Commons FileUpload是一个专门处理HTTP请求中的多部分数据...
文件上传和下载技术详解 文件上传和下载是许多系统和软件...文件上传和下载技术是许多系统和软件中常见的功能,commons-fileupload.jar是Apache Commons提供的一个文件上传组件,提供了许多有用的API来处理文件上传。
6. **commons-fileupload-1.1.1.jar**:Apache Commons FileUpload库处理HTTP多部分上传请求,使得在Web应用中接收和处理用户上传的文件变得简单。1.1.1版本包含了对大文件上传的支持和一些错误修复。 7. **commons...
首先,我们需要理解`Fileupload`的核心组件——`Commons FileUpload`。`Commons FileUpload`是Apache Jakarta项目的一部分,它提供了一个简单且灵活的方式来处理HTTP请求中的多部分数据,即通常用于文件上传的格式。...
在使用Struts2进行文件上传时,需要依赖两个关键的第三方库:`commons-fileupload-1.2.1.jar` 和 `commons-io-1.4.jar`。这两个库在文件上传过程中扮演着至关重要的角色。 首先,`commons-fileupload-1.2.1.jar` 是...
3. **FileUpload组件**:处理HTTP文件上传是Web开发中常见的需求,Commons-FileUpload模块提供了一个简单易用的API,能够优雅地处理大文件上传和多部分表单数据。 4. **Net组件**:Commons-Net库提供了丰富的网络...
本篇文章将详细探讨如何使用SSM来实现文件上传,并关注提供的两个jar包——`commons-io-2.4.jar`和`commons-fileupload-1.2.2.jar`的作用。 1. **文件上传基本流程** 文件上传通常涉及以下几个步骤: - 前端创建...
在本场景中,我们关注的是使用Maven构建的Spring MVC项目,并涉及到`commons-fileupload`和`commons-io`这两个库,它们是Java中处理文件上传的核心工具。以下是关于这个主题的详细知识点: 1. **Spring MVC**: ...
1.commons-fileupload.jar(commons项目中的关于文件上传的包, struts2.1.6版本后必须加入此文件) 2.commons-io.jar(commons项目(commons项目就是java中一些常用的公共的组件)的io子项目,是处理异常的) 3....