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);
分享到:
相关推荐
opencms, content management system, 7.0.5, 由于上传大小限制,分成了两部分,这是第一部分
2. **资源管理**:OpenCMS 提供了强大的资源管理功能,包括文件、图片和其他媒体资源。Java API 允许开发者对资源进行上传、下载、移动、重命名和删除操作,同时支持版本控制和访问权限设置。 3. **工作流引擎**:...
此外,还介绍了资源管理,包括文件和图像的上传、版本控制和权限管理。 4. **工作流管理**:OpenCms支持复杂的工作流程,允许用户定义内容审批流程。文档中会解释如何设置和定制工作流程,确保内容在发布前经过适当...
4. **资源管理**:所有上传的文件和图片都会被统一管理和组织,便于查找和引用。 5. **多语言支持**:除了中文,OpenCms还支持多种语言,方便搭建多语种网站。 6. **集成能力**:可以与各种外部系统集成,如电子...
解压后,你需要按照readme文件的指示将这些文件上传到OPENCMS服务器的正确目录,然后在后台进行配置,使模块生效。 在OPENCMS GeoMap模块的使用过程中,你可能会涉及以下几个关键知识点: 1. **Google Maps API...
9. **故障排查与日志分析**:最后,手册通常会包含一些常见问题的解决方法,以及如何解读和分析OpenCms的日志文件,以帮助用户快速定位并解决问题。 通过深入阅读OpenCms中文用户手册,无论是新手还是经验丰富的...
6. **资源管理**:涵盖如何上传、组织和管理网站的文件资源,如图片、文档和链接。 7. **模块开发**:对于开发者,会提供关于如何扩展OpenCMS功能,开发自定义模块的信息。 8. **搜索引擎优化(SEO)**:指导用户...
Eclipse作为一款广泛使用的Java开发环境,通过OpenCms VFS插件,开发者可以直接在IDE内进行内容的编辑、上传、下载等操作,提高工作效率。 在"plugins"目录下,通常包含的是Eclipse插件的各个组件。每个插件通常是...
1. **部署模板**: 将模板文件上传到OpenCMS的模板目录下,通常为`/webapps/opencms/templaes`。 2. **测试与调整**: 在OpenCMS管理界面创建新的内容或页面,应用新模板,检查显示效果并进行必要的调整。 通过以上...
- **部署OpenCms**:将OpenCms的安装包上传到服务器,并按照官方文档进行配置。 #### 2.2 内容管理和发布 - **内容创建**:利用OpenCms提供的内容编辑器,创建各种类型的内容,如文章、图片、视频等。 - **工作流...
4. **个性化设置**:可以在“设置”中进行个性化设置,包括设置默认语言、项目、站点、视图等,还可以设置头按钮样式、报告类型、上传方式等。 #### 五、总结 OpenCms工作区是一个功能强大的平台,为用户提供了一...
对插件info.rsdev.eclipse.opencms.module.developer进行了功能增强,实现了按选择了项目/目录/文件进行上传;不上传传"."/"test"开头的内容;增加只对classes目录的上传\发布
此外,设置中还可以选择使用Applet或网页方式上传文件。 总的来说,OpenCms工作区是一个强大而全面的管理平台,为用户提供了高效的内容创作和管理工作流程。通过理解和熟练使用工作区的各项功能,用户能够更有效地...
2. 文件管理系统:上传、下载、版本控制,支持文件夹结构和权限管理。 3. 用户及角色管理:定义用户权限,分配不同的操作角色。 4. 工作区管理:用户可以按项目划分工作区,协同编辑内容。 5. 多语言支持:轻松创建...
对插件info.rsdev.eclipse.opencms.module.developer进行了功能增强,实现了按选择了项目/目录/文件进行上传;不上传传"."/"test"开头的内容;增加只对classes目录的上传\发布,本版新增支持OpenCMS7.5以上版本
- **2.7 上传文件** 支持将图片、文档等文件上传至网站,便于内容整合。 #### 三、编辑页面详解 - **3.1 添加与更改文本** 用户可以直接在编辑器中添加新文本或修改现有文本。 - **3.2 更改字体样式** ...
2. **第4章**:可能会讲解OpenCms的资源管理,包括文件、图片、文档等的上传、编辑和组织方式。读者将学习如何在内容管理系统中有效地管理各种媒体资源。 3. **第5章**:可能涵盖模板和布局的设计,OpenCms允许用户...
- 解压 ZIP 文件并将其中的 WAR 包上传到 Tomcat 的 webapps 目录下。 - 启动 Tomcat 服务器。 - 通过浏览器访问 OpenCMS 的初始页面(如:http://localhost:8080/OpenCms/)进行初始化配置。 #### 三、OpenCMS...