ASP编程:用ASP和VBScript上载文件(一)
缺点:安全性不是太差了,还行,只要你充分利用系统自带的工具;唯一缺点就是执行效率慢,如何进行网站优化以后,效果会比较好。vbscript|vbscript从扫瞄器上载文件是从客户机向服务器传送文件的一个浅易办法。从第三代扫瞄器Netscape和Microsoft起,多半扫瞄器都能够向服务器上载文件,而不必要向用户供应特别的会见体例或软件。一些ASP组件是为文件上载而计划的,比方:
PostingAcceptor
(MicrosoftSiteServer的一部分),
AspSmartUpload(Advantys),
AspUpload(PersistsSoftware),
SA-FileUpSoftwareArtisants)
本文的入手下手将告知你关于创立这类组件的信息,而这些组件一般利用VB、C++或Java。
这些组件的成绩在于它们是第三方产物而非尺度ASP的一部分。作为第三方组件,必需在服务器长进行安装。这就意味着必需在服务器上复制DLL并注册。年夜多半的主机体系不同意在他们的服务器长进行如许的设置,由于有大概产生设置成绩(特别是假造主机)。第二个弱点是它们年夜部分不是收费的,不供应源代码,也就不克不及依据必要举行定制。
因而我必要编写VBScript代码来办理文件上载的成绩。这不是一个一定的选择,由于VBScript是一种剧本言语,只能利用variants数据范例,而且不克不及供应很多办理二进制数据和字节数组的内置函数。
要了解上载的历程,起首要晓得数据用HTTP协定从扫瞄器发送到服务器的体例。这就意味着要了解“multipart/form-data”(多部分/格局-数据)的表单提交。
上载表单
一般情形下,利用HTML表单从扫瞄器向服务器传送数据。这个表单中大概包括文本域、查验框、按钮和上载文件的文件范例把持。利用者用本人的数据添补并将这个表提交给服务器。
表单位素中的enctype属性划定了传送给服务器的表数据集编码的内容范例。enctype属性的默许值是“application/x-www-form-urlencoded”,但当向服务器传送大批文本、包括非ASCII字符或二进制数的数据时,这个默许范例就不克不及胜任了。这时候,文件上载提交表单时应利用“multipart/form-data”内容范例。
一个“multipart/form-data”信息包括一系列部件,每一个部件都大概包括:
一个Content-Disposition(内容-处置)头,其值为"form-data";一个划定把持名的name(称号)属性。
关于一个文件范例把持,一个部件大概包括更多信息:
在客户机上划定原始路径和文件名的filename(文件名)属性;所发送的二进制数据把持的Content-Type(内容-范例)头。
在这些头的前面跟从着把持的二进制或文本内容。
以下例子申明“multipart/form-data”的编码,客户机的扫瞄器应有这个表单:
假如这个表单被提交,在服务器上可读到这些哀求:
-----------------------------7cf87224d2020a
Content-Disposition:form-data;name="email"
PhCollignon@email.com
-----------------------------7cf87224d2020a
Content-Disposition:form-data;name="blob";filename="c:image.gif"
Content-Type:image/pjpeg
-----------------------------7cf87224d2020a
Content-Disposition:form-data;name="Enter"
SubmitQuery
-----------------------------7cf87224d2020a--
当谁人内容作为呼应被传送回客户机时就会被显现出来。应当用Request.binaryRead和Response.binaryWrite办法读和写二进制数据。
〈%
Response.BinaryWrite(Request.BinaryRead(Request.TotalBytes))
%〉
能够看到呼应的各部分用分界限来分别:
-----------------------------7cf87224d2020a
最初一个分界限前面跟从的是’--’。
每个把持都有一个Content-Disposition。name属性辨认由HTML表发送的把持(email、blob和Enter)。关于一个文件范例把持(blob),
文件名也是Content-Disposition头的一部分,Content-Type头给出二进制数据的内容范例。
上载剧本
下面一切内容都必需经由分化。在VB或C++中,这十分分明,由于为此供应了很多工具和办法。在VBScript中,必需利用言语所供应的一些函数,并要办理VBScript中利用的双字节编码的变量字符串的成绩。
VBScript函数
原始数据是二进制格局,以是必需利用专为办理二进制数据而计划的VBScript函数。由于我们将原始数据作为一个字节的字符串来思索,以是MidB、InstrB和LenB函数就有效了。可是要制止VBScript的classic字符串,由于它们是双字节编码的字符串,不合适分化成单字节。
这些是VBScript函数中唯一的用来分化字节的函数。还必要一个办法,从被分化的数据中失掉双字节编码的字符串,如许就能够利用VBScript编码中的字符串了。为了在InstrB中把字符串作为一个自变量利用,还必要一个函数,把双字节字符串转换成单字节字符串。
为了我写了两个函数,getString()和getByteString(),稍后再对此举行注释。
布局
分化的数据被存储在VBScriptDictionary工具中。Dictionary工具是hash表工具,它存储(key,item)对。它是VBScript和ASP2.0的一部分。
界说第一个Dictionary工具"UploadRequest"。这个工具包括由上载表提交的一切把持。Key是把持的名字,Item则是工具中所包括的把持的信息:
"ControlName1",Dictionarycontrol1
"ControlName2",Dictionarycontrol2
代表一个把持的Dictionary工具包括着上面的(key,item)对:
"Value",Stringorbinarycontent
"FileName",Nameofuploadedfile
"ContentType",ContentTypeofuploadedfile
把这些分离起来,就有以下例子:
UploadRequest:"email",UploadControl1:"Value",PhCollignon@email.com
"blob",UploadControl2:"filename",C:/image/file.gif"ContentType":
image/gif"Value":GIF89ai?
这个工具关于今后存取和利用数据十分有效。
分化
这里是分化、读和纪录上载把持的代码。这个历程用"BuildUploadRequest"程序来完成,这个程序只要一个自变量,就是原始二进制数据RequestBin。
SubBuildUploadRequest(RequestBin)
起首要找到分界限,经由过程分界限能够晓得把持轮回什么时候停止。
’GettheboundaryPosBeg=1PosEnd=InstrB(PosBeg,RequestBin,getByteString(chr(13)))
bou</p>缺点:正版成本价格贵(盗版就不说了)、不够安全,大多数服务器用windows系统,没有linux安全 多看多学多思。多看一些关于ASP的书籍,一方面可以扩展知识面一方面可以鉴借别人是如何掌握、运用ASP的;多学善于关注别人,向同学老师多多学习,不论知识的大小;多思则是要将学到的知识灵活运用。 下载一个源代码,然后再下载一个VBScript帮助,在源代码中遇到不认识的函数或是其他什么程序,都可以查帮助进行解决,这样学习效率很高。 ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp),它可以看作是VC和Java的混合体吧。 不是很难但是英文要有一点基础网上的教程很少有系统的详细的去买书吧,另不用专门学习vb关于vbscript脚本在asp教材都有介绍 ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象,这就明显产生以下几个问题: 完全不知道到底自己学的是什么。最后,除了教程里面说的几个例子,还是什么都不会。 掌握asp的特性而且一定要知道为什么。 运用ASP可将VBscript、javascript等脚本语言嵌入到HTML中,便可快速完成网站的应用程序,无需编译,可在服务器端直接执行。容易编写,使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行。 在平时的学习过程中要注意现学现用,注重运用,在掌握了一定的基础知识后,我们可以尝试做一些网页,也许在开始的时候我们可能会遇到很多问题,比如说如何很好的构建基本框架。
页:
[1]