网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  用javabean实现文件上载(5)     
  文章作者:未知  文章来源:水木森林  
  查看:82次  录入:管理员--2007-11-17  
 
  用javabean实现文件上载(5)

用javabean实现文件上载-方法

   前面四个public类型的方法用于返回fileuploadbean对象的私有域,它们是:getfilepath,getfilename,getcontenttype以及getfieldvalue。

public string getfilepath()

返回filepath私有域的值。

public string getfilename()

返回filename私有域的值。

public string getcontenttype()

返回contenttype私有域的值。

public string getfieldvalue(string fieldname)

返回html表单中指定输入元素的值,元素的名字通过fieldname参数指定。

public void setsavepath(string savepath)

用该方法指定服务器上保存上载文件的目录的名字。

public void doupload(httpservletrequest request) throws ioexception

doupload是fileuploadbean类中最重要的一个方法。它的任务有二个:第一,它从html表单提取出输入域的名字和值并保存到dictionary对象;第二,doupload方法提取出上载的文件,把这个文件保存到savepath指定的路径,并分别把文件的名字、路径、内容类型赋给filename、filepath和contenttype域。

private void setcontenttype(string s)

由doupload方法调用。setcontenttype方法从原始字节数据提取出上载文件的内容类型。

private void setfilename(string s)

由doupload方法调用。setfilename方法从原始字节数据提取出文件路径和名字。

   doupload方法的参数是servlet/jsp容器创建的httpservletrequest对象。httpservletrequest对象描述了程序为了提取出html表单元素名字-值对以及上载文件必须处理的http请求。doupload方法首先通过httpservletrequest对象的getinputstream方法获得servletinputstream对象。

   如前所述,每一个表单元素由分界符和一组回车换行符分隔。因此,我们可以一行一行地读入httpservletrequest对象的内容。下面这行代码定义了一个名为line的byte数组:
   然后,我们用servletinputstream对象的readline方法读入httpservletrequest对象内容的第一行:

int i = in.readline(line, 0, 128);

   第一行应该是分界符,而且如果没有错误的话,它的长度应该大于3。如果它的长度小于3,我们可以认为出现了错误,doupload方法应该立即返回:

if (i < 3)
return;

   分界符和分界符的长度都非常重要,从本文后面你可以看到这一点。分界符由一组回车换行符结束,因此它的实际长度要比readline方法返回的字节数少2。

int boundarylength = i - 2;

   丢弃byte数组line的最后2个回车换行符即可获得分界符:

string boundary = new string(line, 0, boundarylength);

   接下来,fields域被实例化成hashtable对象。这个hashtable对象将用来保存html表单元素的名字/值对。

fields = new hashtable();

   由于已经有了分界符,接下来我们就可以开始提取出表单元素的值。具体方法是用一个while循环按行读入httpservletrequest对象的内容,直至遇到内容结束readline方法返回-1为止。所有的表单元素都以分界符开始,后面跟上“content-disposition”行,这一行由下面这些字符开始:

content-disposition: form-data; name=

   表单元素有两种类型:文件,非文件(普通的表单元素,如text或者hidden元素)。这两种表单元素的区别在于文件元素包含字符串“filename="filename"”。由此,我们可以利用该信息把文件和非文件的表单输入元素区别开来,代码如下:

if (newline.startswith("content-disposition: form-data; name=/"")) {
if (newline.indexof("filename=/"") != -1) {
// 文件型表单输入元素
// 这里加上提取文件的代码

. . .
}
else {
// 普通表单输入元素
// 这里加上提取表单元素的代码

. . .
}
}
(未完待续)
 
 
上一篇: 用javabean实现文件上载(4)    下一篇: 用javabean实现文件上载(6)
  相关文档
基于jdbc的数据库连接池高效的管理策略 11-16
jbuilder2005+jboss+oracle9i环境配置 11-16
apache与sun开战 指其利用许可打压对手 11-17
动态网页制作技术jsp与asp的比较(1) 11-17
java学习之arraylist(动态操纵数组) 11-17
把业务流程从操作中剥离出来 11-17
java入门——对effective java的评价 11-17
tolocalestring 方法 11-16
使用netbeans为 tivo 开发应用程序详解 11-16
java 多态与抽象工厂-----------菜鸟学飞第二步 11-17
小议如何在application中显示图象 11-17
探索application server的世界 11-17
用java程序如何穿透带有密码验证的代理 11-16
用 spring mvc 轻松进行应用程序开发(图) 11-17
[分享]eclipse 3.0 中jre设置的小错误导致在java文件中连接数据.. 11-17
hibernate 的原理与配置快速入门 11-17
基于swing与awt小应用程序的区别 11-17
漫谈ejb——enterprise javabeans(三) 11-17
开源技术分析:aop和spring事务处理 11-17
提高java代码可重用性的三个措施 11-16
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息