利用ASP改进文档上载控件

控件

随着互联网的发展,人们发布和获取信息的方式发生了根本的变化,越来越多的人开始把网络作为最重要的发布和获取信息的途径,同时,能发布并令信息共享的技术也越来越多。虽然这些技术为开发人员带来了极大的便利,但是由于种种原因,其中有些技术还存在着这样或那样的缺陷。因此,开发人员在选择和使用各种技术时,一定要认清这些技术的优点和局限性,取长补短,才能设计出功能完善的程序。
提出问题
笔者曾在建设企业内部信息网工程中开发过基于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,所以,一旦客户端重新输入新的文件名后提交确认,会使程序五中写入数据库的文件名与实际上载的文件名不一致,造成网页连接时出错。为避免出

时间: 2024-11-05 12:20:41

利用ASP改进文档上载控件的相关文章

利用ASP改进文档上载控件 (转)

控件 利用ASP改进文档上载控件 随着互联网的发展,人们发布和获取信息的方式发生了根本的变化,越来越多的人开始把网络作为最重要的发布和获取信息的途径,同时,能发布并令信息共享的技术也越来越多.虽然这些技术为开发人员带来了极大的便利,但是由于种种原因,其中有些技术还存在着这样或那样的缺陷.因此,开发人员在选择和使用各种技术时,一定要认清这些技术的优点和局限性,取长补短,才能设计出功能完善的程序. 提出问题 笔者曾在建设企业内部信息网工程中开发过基于Web的文档资源共享信息网站.该网站要求上载的文档

Word2010文档内容控件的巧妙使用

  ①打开Word,将光标定位到姓名后面的方格,单击开发工具里面的Aa按钮,即格式文本内容控件. 文档内容控件的巧妙使用-word文档内容控件"> ②可以看到默认的就是单击此处输入文字. ③然后点击开发工具下的控件属性按钮. ④填写标题和题记,勾选内容被编辑后删除内容控件. ⑤确定之后,可以看到表格里面添加了注释,这样就方便了使用者.

多文档-dsoframer控件显示多个文档,如何预览打印其中的一个文档?

问题描述 dsoframer控件显示多个文档,如何预览打印其中的一个文档? dsoframer控件目前使用 Me.AxFramerControl1.Activate()语句可以显示并编辑多个文档,请问怎么能预览打印其中的一个WORD? 解决方案 自己顶一下.大侠们帮忙啊.

在ASP.NET中使用用户控件

asp.net|控件 [摘要]ASP.NET中提供的用户控件,可以解决ASP中无法解决的代码重用问题,更方便了调试工作中的错误检查.本文通过用户控件实现方法讲解和一个用户控件例程的实现,进一步验证了利用用户控件解决代码重用的可行性和有效性. [关键字]代码重用.用户控件.@Register指令 ASP.NET提供了比传统ASP更好的代码分离方案.在传统的ASP中,要将用Server. Execute执行的ASP文件或事务对象组件的代码分离开,一般只能将代码分离成几个文件,然后使用"include

楚琳控件条码-asp.net 使用楚琳控件打印条码出错

问题描述 asp.net 使用楚琳控件打印条码出错 asp.net 使用楚琳控件打印条码会提示 发生下列错误不明的类别TfrxbarCodeView 百度了好久没找到需要的解决方案 看了文档说是 一个TfrBarcodeObject控件必须放在窗体上.否则,在运行时将出现错误信息 但是我找不到这个控件 求牛人帮忙解决下

asp.net学习之数据绑定控件、数据源控件概述

原文:asp.net学习之数据绑定控件.数据源控件概述 1.asp.net数据绑定控件分为三大类,每个类分别进行详细:      ● 列表式数据绑定控件: 列表式数据绑定控件常用来在一个表格内的一个字段进行绑定.显示一个字段下所有数据的信息.           它包括以下几个控件:BulletedList.CheckboxList.DropDownList.ListBox.RadioButtonList           具体的参照以下文章:  http://www.cnblogs.com/

在VS.NET下创建文件上载控件

创建|控件 在VS.NET下创建文件上载控件 前言:还记得在asp3.0里,我们为了上载文件可真是煞费苦心,写了一大堆的代码,可执行起来还是那么慢.但在asp.net里这个问题可以轻松搞定,这篇文章我们就探讨如何建立一个用户自定义的文件上载控件,并在我们的.ASPX程序中使用它.正文第一步:开发自定义文件上载控件打开VS.NET,建立一个工程:WebApp,我们使用WebApp项目来做我们的工作.在项目WebApp上点右健选择Add下的Add Web User Control-,这时我们就可以建

ASP.NET:数据库绑定控件入门

asp.net|控件|数据|数据库     数据绑定控件是Web控件的一部分,但其与数据库紧密结合的,在Web应用程序中的应用十分广泛,所以尤其显得重要.在本章中,我们将详细介绍ASP.NET技术中数据绑定控件的用法.     9.1  数据库邦定控件入门     在学习上一章时候,我们接触到了DataGrid控件,在实例中我们利用DataAdapter从数据库中读取数据,存放到DataSet里,然后绑定到DataGrid控件里,由DataGrid控件显示出来.通过数据绑定控件的不同设置,可以快

ASP.NET:数据库绑定控件DataBind方法

asp.net|控件|数据|数据库     DataBind方法是ASP.NET中一个很重要的概念,几乎所有的控件都需要它控制数据的操作,它的作用是在为控件指定数据源后,执行数据绑定操作.在上一章的DataSet对象实例中我们已经使用过,利用这个方法为DataGrid控件绑定数据,即DataGrid.DataBind().    ASP.NET可以使用DataBind方法来绑定数据的控件除了DataGrid,Repeater,DataList三个专用的数据绑定控件以外,还有些数据集合性质的Web