分享
 
 
 

利用ASP改进文档上载控件

王朝asp·作者佚名  2006-12-16
窄屏简体版  字體: |||超大  

随着互联网的发展,人们发布和获取信息的方式发生了根本的变化,越来越多的人开始把网络作为最重要的发布和获取信息的途径,同时,能发布并令信息共享的技术也越来越多。虽然这些技术为开发人员带来了极大的便利,但是由于种种原因,其中有些技术还存在着这样或那样的缺陷。因此,开发人员在选择和使用各种技术时,一定要认清这些技术的优点和局限性,取长补短,才能设计出功能完善的程序。

提出问题

笔者曾在建设企业内部信息网工程中开发过基于Web的文档资源共享信息网站。该网站要求上载的文档能自动在主页中根据文档的类别按文档标题连接到对应的栏目里。针对这种需求,笔者利用IIS的文档上载控件Posting Acceptor Components,结合数据库和Web技术,开发出了一套自动化程度很高的文档自动网页发布系统和文档自动网页生成系统。在开发该系统的过程中,笔者发现IIS下的上载控件cpshost.dll在使用中存在一定的问题。例如,为完成上载,笔者开发了两个程序:程序一(Upload.asp)提供基于Web的信息文档上载录入界面;程序二(wd_writer.asp)把程序一录入的信息记录到数据库中。其中相关代码如下:

程序一(upload.asp):

……

’提供文档上载的客户界面

<form enctype=“multipart/form-data” action=“http://<%= Request.ServerVariables

(“SERVER_NAME”)%>/scripts/cpshost.dll?PUBLISH?wd_writer.asp” method=“post”>

<p>文档主题: <input type=“text” name=“subject”><br>

作者:<input name=“author” type=“text”><br>

发布时间: <input name=“date1” type=“text”><br>

上载文档名(点击浏览按钮可进行选择):<input type=“file” name=“filename”>

Destination URL: <input type=“hidden” name=“TargetURL”

value=“http://<%= Request.ServerVariables(“SERVER_NAME”)%>/users/wdls ”>

<input type=“submit” value=“发布确定”> </p>

</form>

……

程序二(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):

<form action=“http://<%= Request.

ServerVariables(“SERVER_NAME”)>/wd_read.asp” method=“post">

<p>文档主题: <input type=“text” name=“subject”><br>

作者:<input name=“author” type=“text”><br>

发布时间: <input name=“date1” type=“text”><br>

上载文档名(点击浏览按钮可进行选择):<input type=“file” name=“filename”>

Destination URL: <input type=“hidden” name=“TargetURL” value=“http://<%= Request

.ServerVariables(“SERVER_NAME”)%>/users/<%=Request.ServerVariables(“LOGON_USER”) %>” size=“20”><br>

<input type=“submit” value=“发布确定”> </p>

</form>

程序四(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”)

%>

……

<form enctype=“multipart/form-data” action=

“http://<%= Request.ServerVariables

(“SERVER_NAME”) %>/scripts/cpshost.dll?PUBLISH?wd_writer.asp” method=“post”>

上载文件名(点击浏览按钮可进行选择):<input type=“file” name=“filename” value=“<%=session(“filename”)%>”>

<input type=“hidden” name=“TargetURL”

value=“http://<%= Request.ServerVariables(“SERVER_NAME”) %>/users/wdls” >

<input type=“submit” value=“发布确定”> </p>

</form>

程序五(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):

<form enctype=“multipart/form-data” action=“http://<%= Request.ServerVariables

(“SERVER_NAME”) %>/scripts/cpshost.dll?PUBLISH?wd_writer.asp” method=“post” name=“form1”>

上载文档名(点击浏览按钮可进行选择):<input type=“file” name=“filename” value=“<%=session(“filename”)%>”>

<input type=“hidden” name=“TargetURL” value=“http://<%= Request.ServerVariables

(“SERVER_NAME”) %>/users/wdls” >

’把表单中的按钮改为‘button’模式,变成普通按钮,当点击时,执行脚本程序upload_onclick

<input type=“button” name=“upload” value=“发布确定”>

</form>

’对表单域filename的值进行判断

<scripts language=“VBscript”>

<!--

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

-->

</scripts>

经过上述改进后,系统运转平稳可靠,缩短了信息上网周期,大大地提高了文档的上网效率。该系统完整的程序中还包括对用户口令和权限的验证、文档主题是否为空的验证、作者域验证、文档的分类选择、上载文档重名的验证、数据库操作的异常处理等。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有