-
您的位置:首页 → 精文荟萃 → 软件资讯 → 利用ASP改进文档上载控件
利用ASP改进文档上载控件
时间:2004/10/7 19:09:00来源:本站整理作者:蓝点我要评论(1)
-
随着互联网的发展,人们发布和获取信息的方式发生了根本的变化,越来越多的人开始把网络作为最重要的发布和获取信息的途径,同时,能发布并令信息共享的技术也越来越多。虽然这些技术为开发人员带来了极大的便利,但是由于种种原因,其中有些技术还存在着这样或那样的缺陷。因此,开发人员在选择和使用各种技术时,一定要认清这些技术的优点和局限性,取长补短,才能设计出功能完善的程序。
提出问题
笔者曾在建设企业内部信息网工程中开发过基于Web的文档资源共享信息网站。该网站要求上载的文档能自动在主页中根据文档的类别按文档标题连接到对应的栏目里。针对这种需求,笔者利用IIS的文档上载控件Posting Acceptor Components,结合数据库和Web技术,开发出了一套自动化程度很高的文档自动网页发布系统和文档自动网页生成系统。在开发该系统的过程中,笔者发现IIS下的上载控件cpshost.dll在使用中存在一定的问题。例如,为完成上载,笔者开发了两个程序:程序一(Upload.asp)提供基于Web的信息文档上载录入界面;程序二(wd_writer.asp)把程序一录入的信息记录到数据库中。其中相关代码如下:
程序一(upload.asp):
……
’提供文档上载的客户界面
……
程序二(wd_writer.asp):
<%'打开数据库
Set mydata = Server.CreateObject
(“ADODB.Connection”)
mydata.Open “DSN=xczh;UID=sa;PWD=;”
'从表单中取出各项内容
date1=Request.form(“date1”) '取时间
'取文档主题
subject=Request.form(“subject”)
'取作者
author=Request.form(“subject”)
'取文档文件名
filename=Request.form(“filename”)
'取文档在Web服务器中存放的物理地址
TargetURL=Request.form(“filename”)
'写数据库
sqlstr=“insert into wdlsb values(” & sn & “,‘” & subject & “',‘” & date1 & “',‘”& filename & “',‘” & TargetURL & “',‘” & author & “')”
Mydata.Execute(sqlstr)
%>
上述程序的语法结构和逻辑结构都正确无误,但在使用时却出现了问题。当在程序一中表单的subject 、Author、filename 域中填写汉字后,在程序二中用Request取出的表单域值为乱码,即不能正确从表单中取出域值。此时,表单进行POST请求服务时的域值的封装模式(enctype)为“multipart/form-data”,即RFC 1867。于是笔者把程序一进行POST请求服务时的封装模式修改为“text”,但却出现了“无法上载文档”的错误。笔者分析后发现,文档上载控件cpshost.dll只能在表单的“multipart/form-data”封装模式(既RFC 1867格式)下才能在浏览器与服务器之间进行文档上载。
解决问题
笔者采用改变操作流程的方法,解决了上述问题。首先,由用户填写表单(程序三Upload.asp),并提交给程序四(wd_read.asp)进行预处理。在程序四中利用session对象暂时保存subject、author、date1、filename、targetUrl等表单域的输入值。向用户输出一个确认页面,由用户再次确认表单。然后,设置表单的封装模式为“multipart/form-data”,并进行上载操作。最后,由cpshost.dll调用程序五(wd_writer.asp)。由程序五取出存储于内建对象session中的域值,进行数据库操作和操作确认。如果程序四出现不可预测的错误,则文档上载失败,不会调用程序五,因此保持了数据库的完整性。相关代码如下:
程序三(upload.asp):
程序四(wd-read.asp):
<% '取出程序三中的表单域值并保存在session中
session(“subject”)=Request.form(“subject”)
session(“date1”)=Request.form(“date1”)
session(“author”)=Request.form(“author”)
session(“filename”)=Request.form(“filename”)
session(“TargetURL”)=Request.form(“TargetURL”)
%>
……
程序五(wd_writer.asp):
<% '打开数据库
Set mydata = Server.CreateObject
(“ADODB.Connection”)
mydata.Open “DSN=xczh;UID=sa;PWD=;”
’取各表单域的值
date1=session(“date1”) '取时间
subject=session(“subject”) '取文档主题
author=session(“subject”) '取作者
filename=session(“filename”) '取文档名
'取文档在Web服务器中存放的物理地址
TargetURL= session(“TargetURL”)
'写数据库,保存文档记录
sqlstr=“insert into wdlsb values(” & sn & “,‘”& subject & “',‘” & date1 & “',‘”& filename & “',‘” & TargetURL &“',‘” & author & “')”
Mydata.Execute(sqlstr)
%>
完善程序
上述程序虽然已经能满足设计时的要求,但还是有需要完善的地方。例如,由于在程序三中输入的文件名在程序四中会预置给表单域filename,所以,一旦客户端重新输入新的文件名后提交确认,会使程序五中写入数据库的文件名与实际上载的文件名不一致,造成网页连接时出错。为避免出现此类错误,在进行文档上载时,应对表单域filename的值与程序三中的域值进行比较,如果两者相等,立即进行文件上载,否则取消操作。相关代码如下:
修改程序四(wd_read.asp):
’对表单域filename的值进行判断
sub upload_onclick()
set myform=window.document.form1
tmp=myform.filename.value
if strcomp(tmp,<%=session
(“filename”)%>)=0 then
form1.submit
else
msgbox “输入的文件名有误,请返回重新输入!!!”
end if
end sub
-->
经过上述改进后,系统运转平稳可靠,缩短了信息上网周期,大大地提高了文档的上网效率。该系统完整的程序中还包括对用户口令和权限的验证、文档主题是否为空的验证、作者域验证、文档的分类选择、上载文档重名的验证、数据库操作的异常处理等。
相关阅读
Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么
-
热门文章
360快剪辑怎么使用 36金山词霸如何屏幕取词百度收购PPS已敲定!3
最新文章
微信3.6.0测试版更新了微信支付漏洞会造成哪
360快剪辑怎么使用 360快剪辑软件使用方法介酷骑单车是什么 酷骑单车有什么用Apple pay与支付宝有什么区别 Apple pay与贝贝特卖是正品吗 贝贝特卖网可靠吗
人气排行
xp系统停止服务怎么办?xp系统升级win7系统方电脑闹钟怎么设置 win7电脑闹钟怎么设置office2013安装教程图解:手把手教你安装与qq影音闪退怎么办 QQ影音闪退解决方法VeryCD镜像网站逐个数,电驴资料库全集同步推是什么?同步推使用方法介绍QQ2012什么时候出 最新版下载EDiary——一款好用的电子日记本
查看所有1条评论>>