- 浏览: 59037 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
liumingtong:
我想要你的联系方式.可以吗?要不你加我Q 3813774
success -
抛出异常的爱:
congdepeng 写道Liskov替换原则(LSP)
描 ...
设计原则 -
wumingshi:
楼主关于LSP的解释是错误的。LSP的精髓是,使用父类的代码可 ...
设计原则 -
liumingtong:
struts2的OGNL表达式
struts2的值栈
st ...
总结struts2 完成中······ -
Cindy_Lee:
Joy.zhang 写道
下面是具体的设计模式:
单例 ...
设计模式中11种
本文介绍JSP Commons FileUpload 组件上传文件的总结的文章专题。
也许好东西就是需要慢慢地去发现和总结的.
以前我写的JSP系统都是采用Jsp SmartUpload 组件来解决的.
前几天客户投诉说,上传大文件的时候,浏览器无反应,甚至会崩溃.叫我帮忙解决一下并加上上传进度表示(这个暂且不表,有需要的可加我MSN:info@hkeb.com).
立即google ,baidu 一下,才知JSp SmartUpload 适用于比较小文件的时候,而如果上传大文件的时候还得数commons FileUpload 组件.
在网上翻阅了无数篇关于这个东东的资讯. 基本上每一篇资讯都大同小异.这也难怪,网上的东西都是转来转去的.
上传文件是解决了,但是表单上的其他文本域参数却不知道如何接收.直查得我头破血流,费了一二周都没解决.
因为全部的文章都没有提到如何解决表单的其他文本数据.
直到今天才查得一个比较可行的办法.
1:如果要传参,数据量不是太大的话,可以用get 的带参方法.即 form action 里的upload.jsp后面跟上参数.
例如:upload.jsp?id=1&bid=2&uid=somebody
表单的类型不变.这样在upload.jsp 处理上传文件数据之前可以用request.getParameter("id")来获取参数.
这是一种在传参的数据量不大的情况之下比较可行的方法.
2:如果确实没有办法,必须跟文件域一起提交到上传组件里处理.据网友所说.可以采用如下代码处理.
public MultipartHttpServletRequest resolveMultipart(HttpServletRequest request) throws MultipartException {
DiskFileUpload fileUpload = this.fileUpload;
String enc = determineEncoding(request);
// use prototype FileUpload instance if the request specifies
// its own encoding that does not match the default encoding
if (!enc.equals(this.defaultEncoding)) {
fileUpload = new DiskFileUpload();
fileUpload.setSizeMax(this.fileUpload.getSizeMax());
fileUpload.setSizeThreshold(this.fileUpload.getSizeThreshold());
fileUpload.setRepositoryPath(this.fileUpload.getRepositoryPath());
fileUpload.setHeaderEncoding(enc);
}
try {
List fileItems = fileUpload.parseRequest(request);
Map parameters = new HashMap();
Map multipartFiles = new HashMap();
for (Iterator it = fileItems.iterator(); it.hasNext();) {
FileItem fileItem = (FileItem) it.next();
if (fileItem.isFormField()) {
String value = null;
try {
value = fileItem.getString(enc);
}
catch (UnsupportedEncodingException ex) {
logger.warn("Could not decode multipart item '" + fileItem.getFieldName() +
??? "' with encoding '" + enc + "': using platform default");
value = fileItem.getString();
}
String[] curParam = (String[]) parameters.get(fileItem.getFieldName());
if (curParam == null) {
// simple form field
parameters.put(fileItem.getFieldName(), new String[] { value });
}
else {
// array of simple form fields
String[] newParam = StringUtils.addStringToArray(curParam, value);
parameters.put(fileItem.getFieldName(), newParam);
}
}
else {
// multipart file field
CommonsMultipartFile file = new CommonsMultipartFile(fileItem);
multipartFiles.put(file.getName(), file);
if (logger.isDebugEnabled()) {
logger.debug("Found multipart file [" + file.getName() + "] of size " + file.getSize() +
??? " bytes with original filename [" + file.getOriginalFilename() + "], stored " +
??? file.getStorageDescription());
}
}
}
/***** 注意 parameters 就是普通的text之类的字段的值 *****/
return new DefaultMultipartHttpServletRequest(request, multipartFiles, parameters);
}
catch (FileUploadBase.SizeLimitExceededException ex) {
throw new MaxUploadSizeExceededException(this.fileUpload.getSizeMax(), ex);
}
catch (FileUploadException ex) {
throw new MultipartException("Could not parse multipart request", ex);
}
}
使用方法是:
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
然后就能正常读取参数:
multipartRequest.getParameter("xxx");
行不行,能不能获取到,我没有去验证,有验证成功的告知小弟一声,不胜感激.
也许好东西就是需要慢慢地去发现和总结的.
以前我写的JSP系统都是采用Jsp SmartUpload 组件来解决的.
前几天客户投诉说,上传大文件的时候,浏览器无反应,甚至会崩溃.叫我帮忙解决一下并加上上传进度表示(这个暂且不表,有需要的可加我MSN:info@hkeb.com).
立即google ,baidu 一下,才知JSp SmartUpload 适用于比较小文件的时候,而如果上传大文件的时候还得数commons FileUpload 组件.
在网上翻阅了无数篇关于这个东东的资讯. 基本上每一篇资讯都大同小异.这也难怪,网上的东西都是转来转去的.
上传文件是解决了,但是表单上的其他文本域参数却不知道如何接收.直查得我头破血流,费了一二周都没解决.
因为全部的文章都没有提到如何解决表单的其他文本数据.
直到今天才查得一个比较可行的办法.
1:如果要传参,数据量不是太大的话,可以用get 的带参方法.即 form action 里的upload.jsp后面跟上参数.
例如:upload.jsp?id=1&bid=2&uid=somebody
表单的类型不变.这样在upload.jsp 处理上传文件数据之前可以用request.getParameter("id")来获取参数.
这是一种在传参的数据量不大的情况之下比较可行的方法.
2:如果确实没有办法,必须跟文件域一起提交到上传组件里处理.据网友所说.可以采用如下代码处理.
public MultipartHttpServletRequest resolveMultipart(HttpServletRequest request) throws MultipartException {
DiskFileUpload fileUpload = this.fileUpload;
String enc = determineEncoding(request);
// use prototype FileUpload instance if the request specifies
// its own encoding that does not match the default encoding
if (!enc.equals(this.defaultEncoding)) {
fileUpload = new DiskFileUpload();
fileUpload.setSizeMax(this.fileUpload.getSizeMax());
fileUpload.setSizeThreshold(this.fileUpload.getSizeThreshold());
fileUpload.setRepositoryPath(this.fileUpload.getRepositoryPath());
fileUpload.setHeaderEncoding(enc);
}
try {
List fileItems = fileUpload.parseRequest(request);
Map parameters = new HashMap();
Map multipartFiles = new HashMap();
for (Iterator it = fileItems.iterator(); it.hasNext();) {
FileItem fileItem = (FileItem) it.next();
if (fileItem.isFormField()) {
String value = null;
try {
value = fileItem.getString(enc);
}
catch (UnsupportedEncodingException ex) {
logger.warn("Could not decode multipart item '" + fileItem.getFieldName() +
??? "' with encoding '" + enc + "': using platform default");
value = fileItem.getString();
}
String[] curParam = (String[]) parameters.get(fileItem.getFieldName());
if (curParam == null) {
// simple form field
parameters.put(fileItem.getFieldName(), new String[] { value });
}
else {
// array of simple form fields
String[] newParam = StringUtils.addStringToArray(curParam, value);
parameters.put(fileItem.getFieldName(), newParam);
}
}
else {
// multipart file field
CommonsMultipartFile file = new CommonsMultipartFile(fileItem);
multipartFiles.put(file.getName(), file);
if (logger.isDebugEnabled()) {
logger.debug("Found multipart file [" + file.getName() + "] of size " + file.getSize() +
??? " bytes with original filename [" + file.getOriginalFilename() + "], stored " +
??? file.getStorageDescription());
}
}
}
/***** 注意 parameters 就是普通的text之类的字段的值 *****/
return new DefaultMultipartHttpServletRequest(request, multipartFiles, parameters);
}
catch (FileUploadBase.SizeLimitExceededException ex) {
throw new MaxUploadSizeExceededException(this.fileUpload.getSizeMax(), ex);
}
catch (FileUploadException ex) {
throw new MultipartException("Could not parse multipart request", ex);
}
}
使用方法是:
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
然后就能正常读取参数:
multipartRequest.getParameter("xxx");
行不行,能不能获取到,我没有去验证,有验证成功的告知小弟一声,不胜感激.
发表评论
-
利用jsp读取远程文件保存到本地
2010-07-14 18:02 1841本文介绍利用jsp读取远程文件保存到本地的文章专题。 用js ... -
jsp+tomcat+mysql&sevlet&javabean配置
2010-07-14 18:01 682在配置jsp开发环境的过 ... -
JSP中用bean封装常用的功能
2010-07-14 18:00 713本文介绍JSP中用bean封装常用的功能的文章专题。 1、建 ... -
JSP中关于html的转换技巧
2010-07-14 17:59 609本文介绍JSP中关于html的转换技巧的文章专题。 publ ... -
在JSP中设置HTTP应答头
2010-07-14 17:58 770本文介绍在JSP中设置HTTP应答头的文章专题。 Prime ... -
在JSP中访问CORBA服务对象实例
2010-07-14 17:58 804结合J2EE和CORBA可以充分 ... -
学习jsp与javascript结合在页面间传递参数
2010-07-14 17:57 1285本文介绍学习jsp与javascript结合在页面间传递参数的 ... -
JSP开发前设置
2010-07-14 17:56 682由于朋友问起我开发JSP前都要做些什么,就写了这篇东东。 ? ... -
JSP应用语法详解集三
2010-07-14 17:56 734本文介绍JSP应用语法详 ... -
JSP应用语法详解集二
2010-07-14 17:55 681本文介绍JSP应用语法详解集二的文章专题。 8)标签: 转发 ... -
JSP应用语法详解集一
2010-07-14 17:55 605本文介绍JSP应用语法详解:HTML注释,隐藏注释,Page指 ... -
提升JSP应用程序的7大绝招
2010-07-14 17:54 734本文的目的是通过对servlet和JSP的一些调优技术来极大地 ... -
JSP技巧之:session在何时被创建
2010-07-14 17:54 643本文介绍JSP技巧之:session在何时被创建的文章专题。 ... -
谈谈JSP的九个隐含对象
2010-07-14 17:53 880本文介绍谈谈JSP的九个隐含对象的文章专题,例如:储存和取得属 ... -
解决JSP与MySQL交互的中文乱码问题
2010-07-14 17:51 670首先实现了一个StringConvert bean(GBtoI ... -
JSP几个常见问题
2010-07-14 17:51 704本文介绍JSP几个常见问题的文章专题,Hashtable和 H ... -
JSp的Taglib Directiv语法,属性概述
2010-07-14 17:50 750指示(directive)允许您使用自定义的标签,为标签库命名 ... -
JSP连接SQL Server 2000系统详细配置
2010-07-14 17:50 595到SUN官方站点(http://java.sun.com)下载 ... -
JSP中标签库的深入研究
2010-07-14 17:50 636标签处理器和标签附加信息需要定位在JSP容器类载入器可以找到的 ... -
JSP中基于Session的在线用户统计分析
2010-07-14 17:49 752JSP作为后起之秀能够在 ...
相关推荐
在本文中,我们将深入探讨如何使用Apache Commons FileUpload组件来实现文件上传功能。Apache Commons FileUpload是一个用于处理HTTP请求中的多部分数据的Java库,它使得在Servlet或JSP应用中处理文件上传变得简单易...
总的来说,Apache Commons FileUpload组件通过提供一套完整的API,使得处理文件上传变得标准化和易于管理。通过熟练掌握这个组件,开发者可以轻松地在Java Web应用中实现安全、高效的文件上传功能。
总结起来,`commons-fileupload`组件是处理HTTP文件上传的利器,它简化了文件上传的流程,但同时也需要开发者关注安全性、性能优化等多个方面。在实际应用中,结合`demo.jsp`和`upload.jsp`的示例代码,以及`META-...
标题"commons-fileUpload组件"指的是Apache Commons FileUpload,这是一个Java库,专门用于处理HTTP请求中的文件上传。它与另一个组件Apache Commons IO紧密协作,为Java应用程序提供方便、高效的文件上传功能。 ...
【使用commons-fileupload上传文件】 Apache Commons FileUpload是Apache组织的一个子项目,专注于处理HTTP文件上传。这个组件提供了一个简洁的API,使得开发者能够轻松地在Java应用中处理由浏览器发送的多部分...
【基于commons-fileupload组件的上传下载】是一种在J2EE环境下处理...总的来说,Apache Commons FileUpload组件简化了在JSP和Servlet中处理文件上传和下载的任务,但开发者仍需关注安全性、性能优化和异常处理等方面。
本篇将详细讲解使用FileUpload组件实现JSP文件上传所需的步骤和关键知识点。 首先,`fileUpload组件`是Apache Commons项目的一个子项目,它提供了一套API,可以方便地处理HTTP请求中的多部分数据,即文件上传。在...
【标题】:基于Apache Commons FileUpload的JSP文件上传实现 Apache Commons FileUpload是一个非常流行的Java库,专门用于处理HTTP请求中的多部分数据,也就是通常所说的文件上传功能。在JSP(JavaServer Pages)中...
Struts1.2和Commons-Fileupload是Java Web开发中用于实现文件上传的两个重要组件。Struts1.2是Apache的一个开源框架,主要用于构建MVC(模型-视图-控制器)架构的Web应用程序,而Commons-Fileupload则是Apache ...
在Java Web开发中,文件上传是一项常见的功能,Apache Commons FileUpload和Smart Upload是两个常用的文件上传组件。这里我们将深入探讨这两个库以及如何在实际项目中使用它们。 首先,Apache Commons FileUpload是...
该上传的实现使用到了apache公司的fileupload组件。通过“上传页面”把上传路径提交到upload.jsp页面进行处理,然后把照片文件上传并保存到服务器上。处理代码如下: (); ServletFileUpload upload = new ...
"commons-fileupload实现jsp上传实例(源码)" 这个标题表明了我们讨论的主题是关于使用Apache Commons FileUpload库在JavaServer Pages (JSP)中实现文件上传的功能,并且提供了源代码作为参考。Apache Commons ...
3. **解析请求**:使用Commons FileUpload库解析请求,获取上传的文件项。 4. **保存文件**:从文件项中获取输入流,然后写入到服务器的某个目录,完成文件上传。 四、文件下载步骤 1. **处理请求**:Servlet接收到...
综上所述,`FileUpload` JSP上传下载组件提供了处理文件上传和下载的强大工具,通过合理的集成和使用,可以实现用户友好的文件管理功能。在实际项目中,还需要根据具体需求进行调整和优化,确保系统的稳定性和安全性...
总的来说,Apache Commons FileUpload 1.3.3是Java Web开发中处理文件上传不可或缺的工具,结合Apache Commons IO,可以构建出高效、安全的文件上传功能。这两个库都是Java生态系统的重要组成部分,大大提高了开发...
Apache Commons FileUpload库是一个专门处理HTTP协议中的多部分请求(multipart/form-data)的组件,常用于Web应用程序中的文件上传功能。在Servlet或JSP环境中,它可以帮助开发者轻松地解析请求中的文件数据,避免...