- 浏览: 51672 次
- 来自: ...
文章分类
最新评论
-
cloudgamer:
我也写过一个日期联动选择的功能
日期联动 -
wonderh:
太谢谢了,终于找到答案了。
struts2拦截器 -
kanokano:
可以!!!
JAVAWEB
1 引言
一个网站总是不可避免的要和用户进行信息的交互,倘若是从窗体传送一般的简单输入类型(例如:text、password、radio、checkbox、select等等)的信息到服务器端时,只要使用application/x-www-form-urlencoded的编码方式用session传递就可以了。但是当涉及到和用户之间的文件交换(包括上传和下载)时,就不是那么简单了。在上传文件到服务器时,必须要使用multipart/form-data的编码方式,并且不能直接使用request.getParameter()来取得。至于所使用的方法有很多种,比如:jspsmart公司的jspsmartupload组件,O`Rrilly公司的cos组件,Jakarta Apache公司的commonsFileUpload组件,JavaZoom的uploadbean组件,还有Struts组件中自带的org.apache.struts.upload类工具等等。下面就针对其中的三种解决方案(jspsmartupload、O`Reilly-cos、struts.upload)做一个简单的介绍和对比。<o:p></o:p>
2 O`Rrilly-Cos
Cos组件是O`Rrilly公司开发的,该组件免费,不定期增加新功能,开源。<o:p></o:p>
<v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><v:shape id="_x0000_i1025" style="width: 414.75pt; height: 299.25pt;" type="#_x0000_t75"><v:imagedata o:title="cos" src="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.jpg"></v:imagedata></v:shape>
图1 O`Rrilly-Cos
在Cos组件中,MultipartRequest类主要负责文件上传的处理。MultipartRequest有8个构造函数:<o:p></o:p>
1.Public MultipartRequest ( HttpServletRequest request, String saveDirectory,) throws IOException<o:p></o:p>
2.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, int maxPostSize) throws IOException<o:p></o:p>
3.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, int maxPostSize, FileRenamePolicy policy) throws IOException<o:p></o:p>
4.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, int maxPostSize, String encoding) throws IOException<o:p></o:p>
5.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, int maxPostSize, String encoding, FileRenamePolicy policy) throws IOException<o:p></o:p>
6.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, String encoding) throws IOException<o:p></o:p>
7.Public MultipartRequest ( HttpServletRequest request, String saveDirectory) throws IOException<o:p></o:p>
8.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, int maxPostSize) throws IOException<o:p></o:p>
前6种构造函数都是用来专门处理HTTP协议的,saveDirectory是上传文件要存储在服务器端的目录名称;maxPostSize是用来限制用户上传文件大小的,若超过maxPostSzie,会产生IOException,默认上传文件大小是1MB;encoding可以设定用何种编码方式来上传文件名称,可以解决中文问题。<o:p></o:p>
MultipartRequest类工具有8种方法,利用这些方法,我们可以取得请求的相关信息:<o:p></o:p>
Public Enumeration getParameterNames()<o:p></o:p>
可以取得请求参数的名称<o:p></o:p>
public String getParameter(String name)<o:p></o:p>
此方法传回参数为name的值<o:p></o:p>
public String[] getParameterValues(String name)<o:p></o:p>
此方法主要用在取得当一指定参数具有多个值时,它会传回String的数组<o:p></o:p>
public Enumeration getFileName()<o:p></o:p>
传回所有文件输入类型的名称<o:p></o:p>
public String getFilesystemNames(String name)<o:p></o:p>
用此方法得到上传文件的真正的文件名,这里的name指文件输入类型的名称<o:p></o:p>
public String getContentType(String name)<o:p></o:p>
此方法得到上传文件的内容类型<o:p></o:p>
public File getFile(String name)<o:p></o:p>
此方法得到一个文件对象,代表储存在服务器上的name文件<o:p></o:p>
public String getOriginalFileName(String name)<o:p></o:p>
返回文件在修改政策有效之前的文件名<o:p></o:p>
3 jspsmartUpload
Jspsmartupload组件是由jspsmart公司开发的,安装好它的组件以后,就可以处理文件上传及下载的问题。该组件简单好用,免费,但是源码不公开。<o:p></o:p>
Jspsmartupload Overview:<o:p></o:p>
Free 免费的<o:p></o:p>
upload 1or more files to the server 可上传1个或多个文件<o:p></o:p>
upload to a database 上传文件到数据库<o:p></o:p>
control the upload file by file 可以一列一列的(一个个)控制上传<o:p></o:p>
manage mixed forms files +form fields 可以管理表格文件和表格域<o:p></o:p>
download a file 可以实现文件下载<o:p></o:p>
download a database field 可以从数据库中下载<o:p></o:p>
restrict file size , extension etc 可以限制上传文件的尺寸和类型<o:p></o:p>
MacBinary support MckBinary的支持<o:p></o:p>
Platform: Apache, NT, Unix, Linux, IIS 可以在多种平台上运行<o:p></o:p>
Database : MySQL , Oracle…… 支持多种数据库(最支持MySQL)<o:p></o:p>
整个jspsmartupload压缩包113K,包括有范例、API说明和编译好的class文件,调用这些class文件就可以实习文件的上传下载功能。<o:p></o:p>
<v:shape id="_x0000_i1026" style="width: 414.75pt; height: 299.25pt;" type="#_x0000_t75"><v:imagedata o:title="jspsmartupload" src="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_image003.jpg"></v:imagedata></v:shape>
图2 jspsmartUpoad
Jspsmartupload能实现比O`Rrilly-Cos更多的方法,比如有:<o:p></o:p>
1.public int getSize()方法得到上传文件大小的总和<o:p></o:p>
2.public void setDeniedFilesList(String deniedFilesList)方法设定用户不可上传的类型<o:p></o:p>
3.public void setAllowedFilesList(String allowedFilesList)方法设定用户可上传的文件类型<o:p></o:p>
4.public void setTotalMaxFileSize(Long totalMaxFilesList)设定一次上传文件大小总和 <o:p></o:p>
5.public int getCount()得到Files中的文件个数<o:p></o:p>
6.public Boolean isMissing()测试文件是否确实已经存在<o:p></o:p>
7.public String getFieldName()得到此File在前一个HTML文件中的表格名称<o:p></o:p>
8.public String getFilePathName()得到此File在上传端的文件位置<o:p></o:p>
9.public String getFileExt()得到文件的扩展名<o:p></o:p>
………….<o:p></o:p>
Jspsmartupload的安装:只需把这些class文件拷贝到classes文件夹中即可。<o:p></o:p>
4 <st1:city w:st="on"><st1:place w:st="on">Jakarta</st1:place></st1:city> Apache Struts upload
由于本项目是用Struts结构开发的,所以利用Struts自带的类工具实现上传,这能和工程整体结合的很好,不需要导入其他的包,并且功能强大,使用简单,性能稳定且开源,所以无疑是最佳的选择。<o:p></o:p>
下图是Struts中upload包的结构。基本上要实现上传功能,只要用到FormFiles和MultipartRequestHandler接口就可以解决了。<o:p></o:p>
<v:shape id="_x0000_i1027" style="width: 195pt; height: 258pt;" type="#_x0000_t75"><v:imagedata o:title="struts-upload" src="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_image005.jpg"></v:imagedata></v:shape>
图3 Struts-upload包的结构
基本处理流程是,从页面中传递文件到Form中,然后从Action得到Form中的文件,形成InputStream,然后通过OutputStream写入磁盘。<o:p></o:p>
同样,Struts的upload工具类也可以实现对上传文件大小和类型的控制,可以同时上传多个文件等等。<o:p></o:p>
5 几种方法的比较
<o:p> </o:p> |
O`Rrilly-Cos<o:p></o:p> |
jspsmartUpload<o:p></o:p> |
Struts-upload<o:p></o:p> |
是否开源<o:p></o:p> |
是 |
否 |
是 |
是否免费<o:p></o:p> |
是 |
是 |
是 |
是否继续开发<o:p></o:p> |
是 |
否 |
不明 |
功能<o:p></o:p> |
一般 |
多 |
多 |
可靠性<o:p></o:p> |
高 |
一般 |
高 |
<o:p> </o:p> <o:p> </o:p> <o:p> </o:p> <o:p> </o:p> 特点综述<o:p></o:p> |
免费,开源,不定期增加新功能,可靠性高,代码直接写在jsp文件中 |
简单好用,可上传、下载,功能强大,免费,但是源码不公开,代码直接写在jsp文件中。上传时,文件先预读入内存,当接到save指令时才保存到磁盘,所以上传的性能和文件及内存的大小关系密切。 |
在Struts中使用极为方便,免费,开源,可靠性高,表示层和业务层分离,有后台的Form和Action |
表1 几种上传方法的比较
在研究比较这几种上传组件之后,我认为不管用其中的哪一种都能满足我们的要求,毕竟我们要实现的仅仅是文件上传的功能。最基本的,只要能将文件取得File格式的,就能实现各种各样的功能。<o:p></o:p>
结论是,就本项目而言,使用Struts-upload组件是最贴切的选择;如果要做封装的话,最好选择jspsmartUpload和O`Rrilly-Cos。发表评论
-
java线程
2009-07-28 23:14 660http://www.suneca.com/article.a ... -
java验证码组件
2008-08-21 16:08 1166官方网址:http://code.google.com/p/k ... -
JAVAWEB
2007-09-12 15:48 1293Java学习网站大全 http://www-900.ibm ... -
解析路径问题
2007-07-19 11:05 993我们在解析配置文件的时候,常常会为路径发愁,我就遇到过这样的情 ... -
java反射
2007-07-18 17:22 1206Java提供了一套机制来动态执行方法和构造方法,以及数组操 ... -
java调用存储过程
2007-07-18 08:30 1186首先先做有返回值的存储过程 1, 建一个程序包。如下: C ... -
新一些有用的网址
2007-06-19 09:09 822http://www.exampledepot.com/ -
java.bean.Introspector
2007-05-28 22:02 1288Introspector.getBeanInfo(clazz) ...
相关推荐
关于解析xml文件的,很有用的东东关于解析xml文件的,很有用的东东关于解析xml文件的,很有用的东东关于解析xml文件的,很有用的东东关于解析xml文件的,很有用的东东关于解析xml文件的,很有用的东东关于解析xml...
描述中的“很好的东东哦很好的东东很好的东东”似乎是一种表达满意或喜爱的方式,表明这个sb文件对于用户来说非常有用和满意。这可能意味着该文件不仅能够成功备份和恢复9530的数据,而且使用体验良好。 标签中的...
4. JobClient.exe:这个可执行文件可能是“东东打码”的主程序,用户通过它来启动和管理打码任务。 5. 东东打码.exe:这个也是可执行文件,可能与JobClient.exe相似,是软件的另一个入口点,或者用于特定的功能或...
在深入了解"淘东东V2.2"时,我们可以关注以下几个关键知识点: 1. **功能特性**:作为一款购物应用,淘东东可能拥有搜索商品、浏览店铺、比价、收藏商品、下单购买、支付、查看物流、客户服务等一系列功能。此外,V...
"东东自动化助手正式版v1.5.zip"是一个压缩包文件,包含了"东东自动化助手正式版v1.5.exe"程序以及"node.dll"动态链接库文件。这个工具显然是一个自动化处理软件,用于提高工作效率,减轻用户手动操作的负担。 首先...
【标题】"东东网址向导代码.zip" 提供的是一种网页导航的代码实现,它可能包含了一系列用于创建个性化或特殊效果的JavaScript脚本。在Web开发中,URL导航是必不可少的一部分,它帮助用户轻松地在不同的网页之间跳转...
【csf文件播放器】是一种专门用于播放csf格式文件的多媒体播放软件。在了解这个播放器之前,我们首先需要理解什么是csf文件。csf文件通常被定义为一种加密的视频格式,常用于存储教育、培训或者会议记录等视频内容。...
Office一族的电脑中都会保存着各种各样的文件,如歌曲、电影、图片、各种文本文件、Word文件、Excel电子文稿、压缩文件等等,每个文件都有默认的打开程序,如mp3文件使用Windows Media Player播放,rm文件使用...
对于“东东农场.js”这个文件,它是整个自动化流程的核心。通过阅读和理解这个JavaScript脚本,我们可以了解到如何利用AutoJS来实现自动签到的逻辑。首先,脚本会模拟打开“东东农场”应用,然后定位到签到按钮的...
在处理这类压缩包文件时,用户需要关注几个关键点。首先,定期备份是保证数据安全的重要措施。用户应该将重要的文件存储在可靠的存储介质中,如云存储服务或外部硬盘驱动器,并保持更新。其次,用户需要建立一套合理...
东东农场自动化脚本
FTP(File Transfer Protocol)协议是Internet上用于在主机之间传输文件的标准协议,它允许用户从一台计算机(客户端)向另一台计算机(服务器)上传或下载文件。FTP协议基于TCP/IP模型,工作在应用层,提供了可靠的...
在这个"数据分析东东"的压缩包中,有两个文件:"数据分析.exe"和"说明文件.txt"。"数据分析.exe"很可能是一个用于执行数据分析任务的应用程序或脚本。这类程序通常包含数据预处理、模型训练、预测等功能,可能支持...
淘东东淘宝客程序V2.2.101215 该版本集成截止2010年12月15日前所发布的所有补丁,在此之前发布的补丁无需再次安装 默认清空所有本地商品数据,全站采用远程实时调用模式(强烈建议用户采用该模式,无需采集入库,...
淘东东破解加强版,ASPX.支持采集功能
具体文件类型分布如下:458个PNG图片文件、215个JavaScript文件、160个JPG图片文件、159个GIF图片文件、107个CSS样式表文件、96个Java源代码文件、28个HTML文件、24个XML文件、12个JSON文件、8个Map文件。...
这个东东有两个用处 1.这是一个用HttpWebRequest类构建完整...2.上传地址是金山文档预览的地址,所以,只要上传的是word、pdf、excel一类的文档,可以通过返回的地址直接在线预览,是一种偷懒的文档在线浏览解决方案。
PRIME是一款专为阅读PDF文件设计的高效软件。在PDF文档广泛应用的今天,拥有一个快速、功能齐全且用户友好的PDF阅读器显得尤为重要。PRIME就是这样的工具,它旨在提供流畅的PDF查看体验,帮助用户迅速打开并浏览文档...
Sends a file to a printer 如果暂时没有打印机的话,那就选择打印到文件后,用这个就可以打印到打印机了
东东tools,JD CK抓取提交工具,支持JDX