- 浏览: 1460709 次
- 性别:
- 来自: 广东
文章分类
- 全部博客 (190)
- eclipse (5)
- struts (15)
- spring (1)
- hibernate (0)
- myeclipse (3)
- java (35)
- apache (1)
- PHP (7)
- 虚拟机 (0)
- 网络安全 (3)
- 防火墙 (1)
- linux (7)
- SVN (22)
- 测试文档 (1)
- 测试经验 (0)
- 项目管理 (0)
- BUG管理工具 (3)
- 安装配置 (3)
- 性能工具 (7)
- 脚本学习 (0)
- 协议选择 (0)
- loadrunner错误处理 (0)
- 相关监控配置 (0)
- 框架的认识 (0)
- 手动关联 (0)
- 性能调优 (1)
- 负载均衡 (0)
- 代码学习 (1)
- Windows (5)
- 软件开发安全 (0)
- 考研经验 (1)
- SQL SERVER (1)
- MySQL (6)
- LVS (0)
- ORACLE (1)
- TOMCAT (0)
- 开源框架 (1)
- EOS (3)
- web (5)
- JEECMS (7)
- XML (1)
- LDAP (3)
- ehcache (1)
- Ajax (3)
- OpenSourceTools (1)
- Exception (1)
- 密码学 (1)
- os-centos (1)
- os-ubuntu (0)
- os-FreeBSD (0)
- os-Fedora (0)
- 浏览器-chrome (1)
- flex (1)
- 数据结构与算法 (0)
最新评论
-
joedan0104:
挺方便的,谢谢
JDK1.6官方下载_JDK6官方下载地址:http://www.java.net/download -
naruik:
非常感谢,不用自己找了。收藏和关注了。
JDK1.6官方下载_JDK6官方下载地址:http://www.java.net/download -
scd01234:
感谢!
JDK1.6官方下载_JDK6官方下载地址:http://www.java.net/download -
qingcheng123:
大虾,5.3这个版本有没有下载地址呀,谢谢!
EOS5.3+Tomcat5.0.28升级JDK1.5解决方案 -
1021082712:
JDK1.6官方下载_JDK6官方下载地址:http://www.java.net/download
后记: 记得改了一个支持 encoding 设置的版本, 竟然找不到了.. 回家再看看, 自己的东西也没做版本管理, 挺混乱.... 回头把此文件加入 BeanSoftLib 中去.
近期项目要用到文件上传功能, 先试了用 Jsp Smart upload, 结果发现一个问题: 如果上传的文件名中有汉字, 则发生无法读取参数和文件数据的错误. 后来想到 Struts 的文件上传功能在 Tomcat 和 Weblogic 下都没有问题, 就想到用它来做上传功能, 于是到 Apache 网站下载了 Commons FileUpload 看了看, 发现虽然功能都用, 但是使用太不方便, 例如获取表单参数竟然要一个一个的遍历, 于是就动手写了一个封装类, 这个类可以方便的读取表单参数和文件项目.
首先说一下参考资料:
FileUpload 主站点:
http://jakarta.apache.org/commons/fileupload/index.html
下载 FileUpload 的源码:
http://archive.apache.org/dist/jakarta/commons/fileupload/source/
点击 commons-fileupload-1.0-src.zip 下载源码.
下载 FileUpload 的二进制包(JAR文件):
http://archive.apache.org/dist/jakarta/commons/fileupload/binaries/
在列表中点击 commons-fileupload-1.0.zip 26-Jun-2003 08:32 128K,
下载后解压缩得到的 commons-fileupload-1.0.jar 就可以放到类路径中使用了.
Apache 自己的使用指导(英文版), 强烈建议如果要深入了解如何使用的人看看这个网页:
http://jakarta.apache.org/commons/fileupload/using.html
下面就是这个类的源码了(已经在源码注释中包含了使用说明了):
package studio.beansoft.jsp;
import java.util.*;
import java.io.*;
import javax.servlet.http.*;
import org.apache.commons.fileupload.*;
/**
* Jakarta commons FileUpload 封装类.
* 提供: 参数读取(在 Tomcat 4, 5 下测试过似乎没有中文问题), 文件保存功能.
*
* NOTE: 所有的表单和页面编码都是按照 UTF-8 来处理的.
* TODO Refactor to make encoding configable.
*
* 示例代码(在 JSP 页面中, 忽略了异常处理代码):
* test.htm
<form action="test.jsp">
Input name: <input type="text" name="username"><br>
Select a file: <input type="file" name="file1"><br>
<input type="submit" value="Upload">
</form>
test.jsp
<%@ page contentType="text/html;charset=utf8" %>
<%@ page import="studio.beansoft.jsp.*, java.io.*" %>
<%
JakartaFileUploadHandler uploadHandler = new JakartaFileUploadHandler(request);
// 如果是文件上传表单
if(uploadHandler.isMultipart()) {
// 读取参数
String parameterValue = uploadHandler.getParameter("username");
out.println("username=" + parameterValue);
// 保存文件
JakartaFileUploadHandler.saveFileItem(uploadHandler.getFileItem("file1"), new File("file1.txt"));
}
%>
更多参考资料请看 Apache 的网站上的指导文章:
Using FileUpload
@link http://jakarta.apache.org/commons/fileupload/using.html
*
* @see #getParameter(String)
* @see #getParameterValues(String)
* @see #saveFileItem(FileItem, File)
*
* 这个类依赖于 Jakarta commons-fileupload-1.0.zip.
*
* @author beansoft beansoftstudio@msn.com
* @version 1.01
* 2005-11-30
*/
public class JakartaFileUploadHandler
{
/** 文件域列表 */
private Map fileFields= new TreeMap();
/** 表单域列表 */
private Map formFields= new TreeMap();
/** Check that we have a file upload request */
private boolean isMultipart = false;
private HttpServletRequest request = null;
/**
* 空构造器.
*/
public JakartaFileUploadHandler() {
}
/**
* 根据现有参数构造一个上传处理器.
*/
public JakartaFileUploadHandler(HttpServletRequest request) {
setRequest(request);
}
/**
* 设置 HttpServletRequest 并分析里面的表单数据.
* @param request - HttpServletRequest
*/
public void setRequest(HttpServletRequest request) {
this.request = request;
isMultipart = FileUpload.isMultipartContent(request);
// 如果是文件上传请求, 就提取里面的参数
if(isMultipart) {
// Create a new file upload handler
DiskFileUpload upload = new DiskFileUpload();
/*
* Nov 29 2005, set default upload encoding to UTF-8.
* Specifies the character encoding to be used when reading the headers of
* individual parts. When not specified, or <code>null</code>, the platform
* default encoding is used.
*/
upload.setHeaderEncoding("UTF-8");
try {
// Parse the request
List /* FileItem */ items = upload.parseRequest(request);
// Process the uploaded items
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
String name = item.getFieldName();
String value = item.getString();
if (item.isFormField()) {
processFormField(item);
} else {
processUploadedFile(item);
}
}
} catch (Exception ex) {
System.err.println("无法处理上传数据:" + ex);
}
}
}
/**
* 处理表单项目.
* @param item - FileItem 对象
*/
private void processFormField(FileItem item) {
String name = item.getFieldName();
// NOTE 文件上传统一使用 UTF-8 编码 2005-10-16
String value = null;
try {
value = item.getString("UTF-8");
} catch (UnsupportedEncodingException e) {
}
// 首先尝试获取原来的值
Object oldValue = formFields.get(name);
if(oldValue == null) {
formFields.put(name, value);
} else {
// 多个值存储为 List
// 原来为单个值则添加现有的值
try {
String oldString = (String)oldValue;
List list = new ArrayList();
list.add(oldString);
list.add(value);
formFields.put(name, list);
} catch (Exception ex) {
// ex.printStackTrace();
}
// 原来为多个值则添加现有的值
try {
List list = (List)oldValue;
list.add(value);
formFields.put(name, list);
} catch (Exception ex) {
// ex.printStackTrace();
}
}
}
/**
* 处理文件项目.
* @param item - FileItem 对象
*/
private void processUploadedFile(FileItem item) {
String name = item.getFieldName();
fileFields.put(name, item);
}
/**
* 获取上传的文件项目.
* @param name - String, 文件域名称
* @return FileItem - org.apache.commons.fileupload.FileItem 对象
*/
public FileItem getFileItem(String name) {
if(!isMultipart) return null;
return (FileItem) (fileFields.get(name));
}
/**
* 获取表单参数.
* @param name - String, 表单域名称
* @return String - 表单域值
*/
public String getParameter(String name) {
if(!isMultipart) {
return request.getParameter(name);
}
Object value = formFields.get(name);
if(value != null) {
if(value instanceof String) {
return (String)value;
}
}
return null;
}
/**
* 获取表单域的多个参数值.
* @param name - String, 表单域名称
* @return String[] - 表单域的多个取值
*/
public String[] getParameterValues(String name) {
if(!isMultipart) {
return request.getParameterValues(name);
}
Object value = formFields.get(name);
if(value != null) {
if(value instanceof List) {
return (String[]) ((List)value).toArray(new String[0]);
}
}
return null;
}
/**
* 返回当前请求是否为多部分上传请求.
*/
public boolean isMultipart()
{
return isMultipart;
}
/**
* 保存 FileItem 对象到指定的文件.
* @param item - FileItem, 要保存的上传文件项目
* @param file - File, 要保存到的文件对象
* @return boolean - 是否保存成功
*/
public static boolean saveFileItem(FileItem item, File file) {
try {
item.write(file);
return true;
} catch (Exception ex) {
// ex.printStackTrace();
System.out.println("saveFileItem error:" + ex);
}
return false;
}
/**
* 获取 FileItem 对象的输入流.
* @param item - FileItem, 要获取输入流的上传文件对象
* @return InputStream - 对象的输入流
*/
public static InputStream getInputStreamFromFileItem(FileItem item) {
try {
return item.getInputStream();
} catch (Exception ex) {
// ex.printStackTrace();
}
return null;
}
}
发表评论
-
Struts2 文件上传文件类型allowedTypes汇总
2010-05-19 17:48 1716Struts2 文件上传文件类型allowedTypes汇总 ... -
设置Struts2文件上传的类型和大小
2010-05-19 16:42 2112设置Struts2文件上传的类型和大小 设置Struts ... -
Struts2多文件上传
2010-05-19 16:37 1379Struts2多文件上传 Struts2多文件上传: 在 ... -
Struts2文件上传详解
2010-05-19 16:36 1396Struts2文件上传详解 St ... -
JSP 生成随机验证码图片(经典老代码)
2010-03-21 17:29 1426JSP 生成随机验证码图片(经典老代码) ... -
在Eclipse下创建Jeecms项目图文指南2009-12-30 15:30 Jeecms作为一个开源项目自发布以来受到全国各地JEE用户及爱好者的广泛关注
2010-03-06 12:34 1899在Eclipse下创建Jeecms项目 ... -
在Myeclipse7中整合struts2+spring2.5+hibernate3.2
2009-11-23 16:51 1741在Myeclipse7中整合struts2+spring2.5 ... -
请不要做浮躁的人(转载)
2009-11-23 16:45 1047请不要做浮躁的人(转 ... -
整合Struts2+JasperReport Web报表应用示例
2009-11-23 16:43 3741整合Struts2+JasperReport Web报表应用示 ... -
struts2 get 请求 下载 中文处理
2009-11-23 16:40 1569struts2 get 请求 下载 中文处理 最近因项目 ... -
struts2整合spring应用实例
2009-11-23 16:39 1389struts2整合spring应用实 ... -
struts2 get 请求 下载 中文处理
2009-11-23 16:37 1493Struts2操作request、session和appli ... -
strtus2 批量下载 中文问题、压缩文件等 ------ 讨论struts2工作流程
2009-11-23 16:34 2516strtus2 批量下载 中文问题、压缩文件等 ------ ... -
Struts Spring Hibernate 面试题
2009-03-03 14:38 2191Struts Spring Hibernate 面试题 ...
相关推荐
在Struts2中,文件上传功能是一个常用特性,尤其在处理用户提交的多个文件时。本文将详细讲解如何使用Struts2进行多个文件的上传,重点是使用List集合进行上传。 首先,要实现Struts2的文件上传,必须引入必要的...
在Java Web开发中,Struts2是一个非常流行的MVC框架,它提供了丰富的功能来处理用户交互,包括文件上传。在本教程中,我们将探讨如何利用Struts2框架,结合数组来实现多文件上传,并利用过滤器进行预处理,确保上传...
- **Jakarta Commons FileUpload** 是一个用于处理HTTP文件上传的Java库,它基于**RFC1867**标准来解析和处理文件上传请求。 - **用户指南** 主要介绍了如何使用FileUpload来处理来自客户端的文件上传请求,包括基本...
在这个场景中,我们看到的"Java FTP文件上传下载"是一个具体的实现,它可能包含了一个自定义的工具类`FtpUtil.java`,以及一些依赖的库文件。 `FtpUtil.java`很可能是一个封装了FTP操作的类,包括连接FTP服务器、...
Struts2框架虽然自身并不直接提供文件上传功能,但它支持集成Common-FileUpload和COS等第三方文件上传框架,通过对其进一步封装,简化了文件上传的代码实现,提高了开发效率。 - **Common-FileUpload**:由Apache...
总结来说,Struts2.1.3提供的文件上传功能依赖于正确的配置、JSP表单元素和Action类的处理逻辑。通过这个简单的上传文件小程序,我们可以了解Struts2处理复杂Web交互的基本步骤,并理解如何在Java Web应用中实现安全...
接下来,我们创建一个`S3Util.java`类,用于封装S3的相关操作。这个类通常包含初始化AWS客户端、上传文件、下载文件等方法。以下是`S3Util.java`中上传文件的基本实现: ```java import ...
Apache Commons IO是Apache软件基金会的一个子项目,提供了一系列实用的IO类,扩展了Java标准库中的IO功能。2.5版本包含了各种文件操作、流操作、字符集转换、I/O流过滤器、文件监听等功能。例如,你可以使用这个库...
在Struts2中,创建一个处理文件上传的Action类,通常会包含以下几个核心组件: 1. **文件标题**(`title`):用于存储用户输入的文件描述或标题。 2. **File类型属性**(如`upload`):用来封装用户选择的待上传...
- **功能简介**:`FileUpload` 是一个用于解析HTTP请求中的多部分数据的实用工具类库,特别适用于处理文件上传任务。 - **应用场景**:在Web应用程序中实现文件上传功能时非常有用。 - **使用技巧**:可以通过设置...
在Web开发中,文件上传是一个常见的需求,例如用户可能需要上传图片、文档等。"Struts2多文件上传"指的是在Struts2框架下实现同时上传多个文件的功能。 首先,要实现多文件上传,我们需要在HTML表单中使用`...
在Struts2框架中,文件上传涉及到多个步骤和配置,包括表单设计、Action类的定义、拦截器的配置以及错误处理。以下是对Struts2文件上传的详细总结: 1. **表单设计**: - 在HTML表单中,需添加`...
Struts2是一个非常流行的Java Web框架,用于构建和维护可扩展、...通过以上步骤,你可以在Struts2应用中实现一个完整的文件上传功能。不断学习和实践,理解其背后的原理和安全要点,将使你在开发过程中更加得心应手。
3. **文件上传Action示例**:下面是一个简单的文件上传Action示例代码: ```java public class UploadAction extends ActionSupport { private String title; // 文件标题 private File upload; // 上传文件 ...
在Struts2框架中,文件上传和下载的操作被简化并封装,使得开发者能够更加方便地实现这些功能。 首先,文件上传的原理基于HTML表单的enctype属性。当enctype设置为"multipart/form-data"时,表单数据将以二进制流的...
在实际项目中,为了提高代码的可读性和可维护性,通常会将这些操作封装到一个FTP服务类中,提供简洁的接口供其他组件调用。同时,为了处理异常和优化性能,还会考虑使用连接池、重试机制、断点续传等功能。 总的来...
`jakarta-oro-2.0.8.jar` 是一个正则表达式处理库,由Jakarta项目提供。虽然这个库主要不是为了FTP服务设计的,但它在处理字符串和模式匹配时非常有用,尤其是在解析和验证FTP服务器上的文件路径或者配置信息时。...
15. **Commons Email** 和 **FileUpload**: 支持在应用程序和 Servlet 中轻松添加强大的文件上传功能,以及发送电子邮件。 16. **Commons HttpClient**: 提供 HTTP 客户端框架,支持多种 HTTP 功能和协议。 17. **...