首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

组件之下传上载篇

2012-11-06 
组件之上传下载篇一、最简单的方式:设置表单form 的 method”post” ENCTYPEmultipart/form-data通过Inpu

组件之上传下载篇

一、最简单的方式:
设置表单form 的 method=”post” ENCTYPE="multipart/form-data"
通过
InputStream in =servletRequest.getInputStream();
以流的方式处理,它的缺点就不言而喻了

二、commons-fileupload:
官方网站:[http://jakarta.apache.org/commons/fileupload/]
它提供基于Servlet的上传,可上传到内存、文件,且文件的上传位置,最大上传文件字节数可以在程序中设置,
特别是对于多文件上传支持较好,List items = upload.parseRequest(request)就可以处理多文件,其他都不用考虑,
提供了item.isFormField()判断是否为标准表单值的方法,简洁实用,但是可配置仍然不好,对API的依赖性很大

使用步骤:
1、首先判断一个HttpServletRequest是否是一个上传文件的请求:
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
2、处理请求:
2.1、创建基于硬盘存储的工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
/* 或者
DiskFileItemFactory factory = new DiskFileItemFactory(yourMaxMemorySize, yourTempDirectory);
*/
2.2、设置工厂属性,从而生成个性化ServletFileUpload
//设置最多只允许在内存中存储的数据,单位:字节
factory.setSizeThreshold(yourMaxMemorySize);
// 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
factory.setRepository(yourTempDirectory);
2、处理上传文件:
Iterator iter = items.iterator();
while (iter.hasNext()) {
?? FileItem item = (FileItem) iter.next();
?? //判断是否为标准表单域
?? if (item.isFormField()) {
??????? String name = item.getFieldName();
?String value = item.getString();
???…
??? ?} else {
??String fieldname = item.getFieldName();
??String filename = item.getName();
??String contentType = item.getContentType();
??boolean isInMemory = item.isInMemory();
??long sizeInBytes = item.getSize();
??…
?//直接从内存访问上传数据
?byte[] data = item.get();
???
?//采用流方式读取上传文件
?InputStream stream = item.openStream();

?// 保存到文件
?if (writeToFile) {
?File uploadedFile = new File(storeFilePath);
?item.write(uploadedFile);
??? } else {
?//转换为输出流
?InputStream uploadedStream = item.getInputStream();
?...
?uploadedStream.close();
?}
}
...


三、javazoom的UploadBean:
官方网站:[http://www.javazoom.net/jzservlets/uploadbean/uploadbean.html]

功能强大,支持上传到文件系统,数据库,同时它还有一些高级功能,如对上传的监听,overwrite过滤器、自定义解析器、
overwrite策略、黑名单、白名单等,特别是它采用了JavaBean方式,所以在JSP页面可以轻松的采用
<jsp:useBean id="upBean" scope="page" >
? <jsp:setProperty name="upBean" property="folderstore" value="c:/uploads" />
</jsp:useBean>
从而实现上传到硬盘目录但是它的源代码是需要Money的,我们只能得到它的jar包和API Doc,
同时它对多文件上传处理的不是很好(我觉得)。

官方网站上有详细的说明供参考。

四、Jspsmartupload
官方网站:[http://www.jspsmart.com] 可惜一直打不开组件之下传上载篇
这里有一篇文章说明:[http://java.ccidnet.com/art/3737/20060717/638255_1.html]

?

? 1 楼 jamesby 2007-01-23   不错,我现在用smartupload,但是想该成用Spring MVC的upload

热点排行