`
duoerbasilu
  • 浏览: 1541636 次
文章分类
社区版块
存档分类
最新评论

OpenCMS 文件上传 Apache Jakarta Commons-FileUpload

 
阅读更多

Apache Jakarta Commons-FileUpload

OpenCms提供了一个Applet用于文件上传,但这一功能在定制开发中受到很大限制,OpenCms带有Commons-FileUpload包,我们可以利用其中的功能实现文件上传

FileUpload可以结合你的应用被用于不同的情况。在最简单的情况下,你可以调用一个方法处理servlet请求,得到一个对象的列表用于你的应用系统。对于其他复杂的情况,你可以使用FileUpload控制整个上传的过程,例如你可以决定不同的内容存放到不同的地方或存储到数据库中。

FileUpload需要Commons IO支持,因此在使用FileUpload前明确相关的jar文件在classpath下。

一个文件上传的请求含有一个顺序的items的列表,他们由RFC 1867规则编码,“基于表单的文件提交”。FileUpload可以解析这样的请求,并把这些items生成一个列表供应用程序使用。每个items引用FileItem接口,我们会在后面详细讨论。

每个file items有一系列的properties会被应用程序使用。如:每一个item有一个文件名和一个内容,并能提供一个InputStream用于获得数据。FileItem接口提供了一系列方法以决定上传数据的来源。

FileUpload创建新的文件使用FileItemFactory。它给了FileUpload最大的扩展性。它提供了对每一个item的控制,如存入内存或磁盘。并且这些行为是可定制的,以适应你的系统。

* 检查请求是否含有上传文件
// Check that we have a file upload request
boolean isMultipart = ServletFileUpload.isMultipartContent(request);

* 解析上传请求:
// Create a factory for disk-based file items
FileItemFactory factory = new DiskFileItemFactory();

// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);

// Parse the request
List /* FileItem */ items = upload.parseRequest(request);
现在我们得到了items的列表

如果你的应用近于最简单的情况,上面的处理就够了。但我们有时候还是需要更多的控制。
下面提供了几种控制选择:
// Create a factory for disk-based file items
DiskFileItemFactory factory = new DiskFileItemFactory();

// Set factory constraints
factory.setSizeThreshold(yourMaxMemorySize);
factory.setRepository(yourTempDirectory);

// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);

// Set overall request size constraint
upload.setSizeMax(yourMaxRequestSize);

// Parse the request
List /* FileItem */ items = upload.parseRequest(request);

当然,每一种控制方法都是独立的,但你如果想一次性设置factory,你可以在构造方法中完成:
// Create a factory for disk-based file items
DiskFileItemFactory factory = new DiskFileItemFactory(
yourMaxMemorySize, yourTempDirectory);

一旦解析完成,你需要进一步处理item的列表。
// Process the uploaded items
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();

if (item.isFormField()) {
processFormField(item);
} else {
processUploadedFile(item);
}
}

区分数据是否为简单的表单数据,如果是简单的数据:
// Process a regular form field
if (item.isFormField()) {
String name = item.getFieldName();
String value = item.getString();
...
}

如果是提交的文件:
我们可以得到一些属性:
// Process a file upload
if (!item.isFormField()) {
String fieldName = item.getFieldName();
String fileName = item.getName();
String contentType = item.getContentType();
boolean isInMemory = item.isInMemory();
long sizeInBytes = item.getSize();
...
}

对于这些item,我们通常要把它们写入文件,或转为一个流
// Process a file upload
if (writeToFile) {
File uploadedFile = new File(...);
item.write(uploadedFile);
} else {
InputStream uploadedStream = item.getInputStream();
...
uploadedStream.close();
}

或转为字节数组保存在内存中:
// Process a file upload in memory
byte[] data = item.get();
...

如果这个文件真的很大,你可能会希望向用户报告到底传了多少到服务端,让用户了解上传的过程
//Create a progress listener
ProgressListener progressListener = new ProgressListener(){
public void update(long pBytesRead, long pContentLength, int pItems) {
System.out.println("We are currently reading item " + pItems);
if (pContentLength == -1) {
System.out.println("So far, " + pBytesRead + " bytes have been read.");
} else {
System.out.println("So far, " + pBytesRead + " of " + pContentLength
+ " bytes have been read.");
}
}
};
upload.setProgressListener(progressListener);

分享到:
评论

相关推荐

    istack-commons-soimp-2.19.zip

    【标题】"istack-commons-soimp-2.19.zip"是一个软件组件包,而【描述】中的"portaldemo.zip"则是另一个与门户演示相关的Web应用程序。这两个压缩包都与IT行业的开源项目有关,这表明它们可能是社区驱动的项目,允许...

    OpenCMS 6.2.x User-Manual

    支持将图片、文档等文件上传至网站,便于内容整合。 #### 三、编辑页面详解 - **3.1 添加与更改文本** 用户可以直接在编辑器中添加新文本或修改现有文本。 - **3.2 更改字体样式** 提供多种字体样式选择,...

    OpenCms7.5.0千寻汉化包_2009-08-11修正版

    OpenCms7.5.0千寻汉化包_2009-08-11修正版是一款针对OpenCms 7.5.0版本的中文本地化解决方案,主要目的是为了解决英文界面对于中文用户操作不便的问题。OpenCms是一款基于Java技术的开源内容管理系统(CMS),它提供...

    OpenCMS教程

    - 继续修改Apache配置文件,去掉第二个opencms。 - **2.3.4 集成Apache、Tomcat和OpenCms的意义** - 提高系统的稳定性和安全性; - 优化访问速度; - 支持更复杂的功能。 **2.4 OPENCMS启动指导** - 确保所有...

    opencms去掉两个tomcat

    \Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf`),启用`mod_proxy`和`mod_proxy_http`模块,然后在文件末尾添加虚拟主机配置,以将所有`/opencms`路径的请求代理到Tomcat上的OpenCms实例:...

    mercury-template:Mercury模板是适用于OpenCms的完整模块化模板-http

    OpenCms水星模板 适用于OpenCms的功能齐全,可自定义,外观漂亮的响应模板 Mercury模板是的完整的模块化模板。 它基于Bootstrap 4,并允许您通过拖放来创建甚至复杂的网格布局。 它包含了大量CSS功能和JavaScript...

    ant-opencms-1.2.jar.zip

    首先,"ant-opencms-1.2.jar"是Ant与OpenCMS集成的一个特定版本的库文件,它封装了Ant任务,使得Ant可以直接与OpenCMS进行交互,执行诸如部署、更新、内容发布等操作。这个JAR文件包含了Ant任务定义和OpenCMS相关的...

    如何安装OPENCMS

    2. **解压OPENCMS**:将下载的ZIP文件解压到你希望存放OPENCMS的目录中,例如C:\Program Files\OpenCms。 3. **配置环境变量**:将OPENCMS的`WEB-INF/classes`目录添加到系统环境变量`JAVA_CLASSPATH`中。 4. **...

    OpenCms7.5.0千寻汉化包_2009-06-27修正版

    这些文件被整合到OpenCms7.5.0中,以便用户在安装后能直接使用汉化后的版本,无需自己手动进行翻译和配置。 总的来说,OpenCms7.5.0千寻汉化包的修正版是一个为了提升中文用户使用体验而精心制作的更新,它解决了...

    OpenCms7--源代码编译安装-分享[收集].pdf

    OpenCms是一款开源的内容管理系统,主要用于构建和管理网站。在本文中,我们将详细介绍如何在Tomcat 5.x和Mysql 5.x环境下,基于源代码编译安装OpenCms 7.0.1。首先,我们需要确保具备正确的软件环境。 **第一步:...

    如何创建OpenCms后台管理模块

    - **添加JSP页面**:创建JSP页面作为管理界面的视图,这些页面可以通过OpenCms的VFS(虚拟文件系统)访问。 - **配置Action Handler**:定义Action Handlers,这些是处理用户请求的Java类。它们与URL路径关联,...

    opencms 内容管理入门指南

    - **解压部署**:将下载的OpenCMS文件解压到服务器的合适目录,并配置相关的配置文件(如`web.xml`和`ocms.properties`)。 - **启动服务**:通过应用服务器(如Tomcat)启动OpenCMS服务。 ### 3. 开发环境设置 ...

    OpenCMS内容管理系统入门教程

    ### OpenCMS内容管理系统入门教程知识点总结 #### 一、OpenCMS概述 - **定义与特点**: - OpenCMS是一个专业级别的开源网站内容管理系统,基于Java语言开发。 - 它可以帮助用户轻松建立和管理复杂的网站,即使不...

    opencms系统教程

    **OpenCMS系统教程** OpenCMS是一款开源的内容管理系统(CMS),专为创建、管理和发布Web内容而设计。它基于Java技术和JSP(JavaServer Pages)进行开发,提供了强大的内容管理功能和灵活的模板机制,使得非技术...

    eclipse-FTP-WebDAV-OpenCms7.5.x.zip

    在"eclipse-FTP-WebDAV-OpenCms7.5.x.zip"这个压缩包中,可能包含的是专门为Eclipse设计的FTP和WebDAV插件,或者是针对OpenCms 7.5.x的开发工具集,这些工具集可能包括配置文件、库文件以及如何将这些插件集成到...

    OpenCms中文用户手册

    ### OpenCms中文用户手册知识点解析 #### 一、OpenCms概述 **1.1 OpenCms定义** - **定义**: OpenCms是一款专业的开源网站内容管理系统(CMS)。该系统采用Java语言开发,旨在帮助企业及个人快速构建、管理和维护...

    OpenCms-install.rar_opencms

    1. 下载OpenCms的最新稳定版本:访问OpenCms官网并下载相应的ZIP或WAR文件。 2. 将下载的OpenCms WAR文件放到Tomcat的`webapps`目录下。如果使用的是ZIP文件,需要先解压到`webapps`目录下,并重命名为`opencms`。 3...

Global site tag (gtag.js) - Google Analytics