深入解析ASP核心技术.html.pdf

上传人:紫竹语嫣 文档编号:5518710 上传时间:2020-05-28 格式:PDF 页数:40 大小:9.07MB
返回 下载 相关 举报
深入解析ASP核心技术.html.pdf_第1页
第1页 / 共40页
深入解析ASP核心技术.html.pdf_第2页
第2页 / 共40页
深入解析ASP核心技术.html.pdf_第3页
第3页 / 共40页
深入解析ASP核心技术.html.pdf_第4页
第4页 / 共40页
深入解析ASP核心技术.html.pdf_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《深入解析ASP核心技术.html.pdf》由会员分享,可在线阅读,更多相关《深入解析ASP核心技术.html.pdf(40页珍藏版)》请在三一文库上搜索。

1、前言 作为一名纯“码农”,我已经在键盘上敲敲打打了10余年,使用的语言主要是Java,但是,我对ASP依然情有独钟。当年在学习了HTML后,接触的第一门编程语言就是ASP,可以说,它是我的入门 语言,我相信,它也是很多人的入门语言。 凭借着自学的ASP基础,我找到了第一份编程工作,而我所学的专业却是化学工艺。工作闲暇,我“泡”在经典论坛的后台编程区学习,后来当上了版主。那段时间,绝对是经典论坛的鼎盛时期,帖 子很多,回复也很多。大家都热情高涨,共同研究、共同学习、共同进步,很多人的名字至今我记忆犹新,如布鲁斯狼、帅青蛙、幻想曲等。对了,我的网名是萧萧小雨,相信很多人看过我撰写的“让你 知道co

2、depage的重要”一文。 ASP入门简单,但要想成为高手很难。在实际开发中,你会碰到各种各样的问题,有很多需要掌握的知识点,如文件上传、文件管理、生成验证码、发邮件、抓天气预报、抓新闻、XML文件处理、 Ajax使用、编码问题、存储过程调用、Excel文件处理等。 论坛的帖子五花八门,回复的多了,你就会觉得,真的需要一本进阶或者总结的书籍。市面上的书籍只能让你入门,后续的学习如果完全凭借自己研究、网络搜索和网络求助,那么所能获取的知识将 是零零散散、支离破碎的,无法构成完整的知识体系。 于是,我在论坛发帖说,我想写本ASP的书。有些人说:“小雨,支持你,我第一个买。”也有些人说:“这方面的书

3、太多了,并且写得都不错,建议你还是放弃吧。”不管三七二十一,我还是动笔 了。充满激情地写了几章基础知识后,我写不动了,因为太没意思,写完之后,我觉得它和别人写的书没啥两样。经过一阵困惑和思考之后,我决定去掉入门知识的章节,写点有难度的。所以作为本书的 读者,你应该已经掌握了ASP的基本知识,能够独立搭建运行环境,能够编写简单的应用程序,能够处理简单的常见问题。 最终,本书的章节结构是这样的: 第1章讲解FSO文件管理。FSO的使用其实比较简单,放在第1章作为过渡。学习该章后,你可以熟练地进行文件管理的相关操作及文本流的操作。 第2章讲解字符与字节流转换及Adodb.Stream对象的使用,为编

4、码转换打下基础。 第3章讲解各种常见编码、乱码的由来、CodePage的使用和问题举例。学习该章后,你可以解决大部分的乱码问题,达到随心所欲的地步。 第4章讲解XMLDOM的使用,学习本章后,读者进行XML处理再无压力。 第5章讲解XMLHTTP和ServerXMLHTTP的使用,前者是Ajax技术的核心,后者是抓取网页的利器。 第6章讲解正则表达式的基础知识及正则对象的使用。本章讲解的仍然是基础知识,正则说简单也简单,说难也难,多写多练才是王道。 第7章讲解文件上传与下载。该章从基础原理讲起,包括无组件上传、组件上传和上传漏洞等。最后讲解文件下载,包括缓存处理、分段下载等略难一点的知识,需要

5、读者对HTTP知识略有了解。 第8章讲解常用的AspJpeg图像处理组件,包括大部分的功能讲解,还包括GIF动画的一些知识。 第9章讲解Email发送的知识,包括Email基础结构、常见的发信组件的使用、附件的处理等知识。 我相信,本书已经包括ASP常用的重点内容。很抱歉,本书并没有讲ADO的使用,虽然它是一个重点,但是每本书都会讲它,所以大家可能已经很熟悉了。而且深入讲解ADO的话,就够写一本书了, 这样的书已经有了。 写作的过程是痛苦的,因为它是一本技术书籍,我唯恐因为我的无知或一知半解误导了各位读者。对每个模糊的知识点,我都尽力搞清楚,对每个疑难问题,我都尽力找到解决方案。我参考了很多书

6、 籍、文章、API文档,如精通正则表达式正则表达式经典实例、HTTP权威指南、MSDN等。我相信,一个普通的ASP程序员做不到这些,我就是要用我10年的技术功力来写一本关于ASP的书 籍,只为这一份执着,这一个约定,也为了给妻子一个小小的回报。这本书耗费了我大量的时间和精力,感谢我的妻子为我们这个小家做出的一切。 其实,我最应该感谢的是机械工业出版社的编辑,没有他们对我的鼓励,没有他们的帮助,就没有这本书的面世。感谢他们所做的一切。 虽然我很努力,但是书中依然可能存在错误、疏漏之处,敬请各位读者不吝赐教。 王洪影 2016年3月15日 第1章 FSO文件管理 1.1 FSO简介 FSO即Fil

7、e System Object组件,它提供了常见的文件夹及文件管理功能,如创建文件夹、复制文件夹、删除文件夹、复制文件和删除文件等。另外,它还可以读写文本文件和获取驱动器信息。 第1章 FSO文件管理 1.1 FSO简介 FSO即File System Object组件,它提供了常见的文件夹及文件管理功能,如创建文件夹、复制文件夹、删除文件夹、复制文件和删除文件等。另外,它还可以读写文本文件和获取驱动器信息。 1.2 驱动器集合 FSO对象的Drives属性返回所有驱动器的集合,可以使用For Each语句遍历它,集合中的每一项都是一个Drive对象。 下例遍历所有的驱动器,并输出盘符及驱动器

8、类型。 driveList.asp driveList.asp “ 输出所有驱动器的盘符及类型 For Each drive In driveList Response.Write “驱动器“ “ % 运行结果如图3-46所示。 图3-46 Charset影响显示效果 因为Charset是Big5,意味着CodePage为950时输出的字符可以正确显示,936时输出的字符则不能,所以936时输出的“尘”字被显示成了“鳥”字。不过,只要将字符转换为HTML实体形式就可以 正常显示了,转换方法很简单,只要通过AscW函数取得字符的Unicode编码,然后转为十进制数字,按格式拼接即可。 3.7 数

9、据库操作中的编码转换 ASP操作的数据库通常为Access和SQL Server。下面以SQL Server为重点,讲解一下数据库操作过程中的编码转换问题。 3.8 编码转换整体流程图 下面以POST方式提交表单为例,看一下编码转换的整体流程,如图3-57所示。 图3-57 编码转换整体流程图 编码转换的关键点主要是:提交数据、读取源文件,Request解析、数据库和文件操作、Response输出和浏览器显示。碰到乱码的情况时,只要顺着流程图依次推算每个关键点的结果,就可以知道问 题出在哪里,然后对症下药即可。 3.9 问题举例 3.9.1 如何编写UTF-8编码的程序 要编写一套UTF-8编

10、码的程序,具体应该如何做呢? 所有ASP文件保存为UTF-8编码,然后以UTF-8编码打开进行编辑。 每个ASP文件都使用Codepage=65001。 每个ASP文件前部都使用Response.Codepage=65001,以消除Session.Codepage可能带来的影响。 如果使用了Response.Charset属性,那么应该设置为UTF-8。 HTML中的Charset使用UTF-8,设置Charset的行放在行之前,以防解析错误。 引用的JS、CSS等文件也要另存为UTF-8编码,或者在引用时声明文件所使用的charset也可以。如: 编写其他编码的程序也是类似的,使用对应的Co

11、dePage和charset即可。经过如此处理的多套不同编码的程序即使放在一起也不会互相干扰。 3.10 关于本地化 本地化包含的内容很多,如数字日期和时间的格式、货币符号、排序规则、键盘用法、符号、图标、颜色、动作、思想、习惯、法律等很多方面。 在ASP中,可以通过切换区域设置,来达到本地化的目的,当然,能够本地化的仅仅有数字、日期、时间、货币和排序规则。 打开系统的“控制面板/区域和语言选项”,可以变更选择的区域,那么当前的数字、日期、货币等的格式就会发生改变。在ASP中切换区域的作用也是类似的,并且初始的数字、日期、货币等的格式 也是由控制面板这里的设置决定的。 如图3-66所示是“区域

12、选项”对话框的图片。 图3-66 区域选项对话框 单击“自定义”按钮,可以详细设置各种格式,如图3-67所示。 图3-67 区域选项的自定义选项 第4章 XMLDOM操作 XML本身很简单,一个XML文件只是一个普通的文本文件而已,但是,由于XML独特的层次结构,从中解析数据是相当麻烦的。 DOM是Document Object Model的缩写,它定义了一个与平台、语言无关的接口,允许程序和脚本动态地访问、更新XML文档的内容、结构和样式。DOM只是一种定义,它只是说这种模型应该怎 么样,而没有具体实现它,任何人可以用任何语言来实现它。 MSXML组件是微软的XML解析器。它以COM对象的形

13、式实现了DOM,它会将XML数据变成一个个对象,通过对象的属性和方法就可以进行各种操作,方便快捷。 DOM实现只是MSXML组件的一部分,它还实现了SAX2、XSD、Xpath和XSLT等模型。 4.1 MSXML简介 4.1.1 MSXML的版本 MSXML的版本比较混乱,系统不同,安装的软件不同,MSXML的版本可能就不同。下面简单列举几个: MSXML最新的版本是MSXML6.0,通常需要单独下载安装。 MSXML5.0是伴随着Office 2003或Office 2007而来的。 IE6.0附带的是MXML3.0 SP2版本,IE6.0 SP1附带的是MXML3.0 SP3版本。 MD

14、AC 2.7(Windows XP)附带的是3.0SP2,而MDAC 2.8(Windows Server 2003)是3.0SP4。 Microsoft.NET Framework 3.0、Microsoft Visual Studio 2005、Microsoft SQL Server 2005附带的是MSXML 6.0。 MSXML的多个版本是共存的,即使安装了新版本,旧版本还是存在的。MSXML5.0对应的文件是MSXML5.dll,它通常位于C:Program FilesCommon FilesMicrosoft SharedOFFICE11目录 下,而MSXML.dll、MSXML

15、2.dll、MSXML3.dll、MSXML4.dll和MSXML6.dll是位于System32目录下的。 建议使用6.0版本,其次是3.0版本。因为6.0版本的安全性、性能、稳定性和W3C一致性都是最好的,3.0版本的安装最广泛,而5.0版本主要是用来支持Office的,4.0版本已被6.0版本替代。 本章中的范例均以6.0版本为准。6.0版本实现了以下标准: XML 1.0(DOM和SAX2 API) XML Schema(XSD)1.0 XPath 1.0 XSLT 1.0 4.2 创建Document对象 创建Document对象使用以下格式即可: Set doc = Server.

16、CreateObject(“Microsoft.XMLDOM“) 系统中可能存在多个版本的MSXML组件,表4-2是每个版本对应的创建字符串,一般建议使用6.0版本或3.0版本。 表4-2 MSXML的版本及对应字符串 无法确认系统支持哪些版本时,可以按版本号从高到低依次创建,直到创建成功。下面看一下范例,范例中将创建的代码封装为一个Function。 createObject.asp “ Err.clear() End If Next End Function % 版本不同,支持的属性和方法都略有不同,下面的范例都是在6.0版本上运行的,如果系统没有安装6.0版本,那么可能会出现一些错误。

17、4.3 载入XML数据 4.3.1 载入数据 载入XML数据可以使用Document对象的Load方法或LoadXml方法,前者读入指定URL或指定路径的XML文档,后者读入XML数据的字符串。 xmlDoc.Load Server.MapPath(“music.xml“) xmlDoc.LoadXml “兄弟” 这两个方法的结果都是读入成功返回True,失败则返回False。 4.4 验证XML数据 4.4.1 ParseError对象 载入XML数据后,建议对数据进行验证,否则有问题的数据可能会影响后续操作。调用Load方法或LoadXml方法后,通过Document对象的parseErr

18、or属性可以得到ParseError对象,它的属性如表4- 4所示。 表4-4 ParseError对象的属性 通过这些属性,可知道错误的原因及位置。验证的时机,可分为载入时验证和使用前验证。 4.5 遍历节点 4.5.1 节点常用属性 DOM树中的元素、属性、注释、过程指令等全都是节点对象,整个DOM树就是由一个个节点组成的。 节点的数据类型是IXMLDOMNode,而IXMLDOMElement、IXMLDOMAttribute、IXMLDOMComment、IXMLDOMProcessingInstruction等全都是IXMLDOMNode的子类型,它们拥有 IXMLDOMNode的全

19、部属性和方法。 节点对象提供了很多属性,使用这些属性可以轻松遍历整个DOM树,表4-5是节点对象的常用属性。 表4-5 节点对象的常用属性 下面看一下范例。 traverseNodes.asp “ Var xmlHttp = new ActiveXObject(MSXML2.XMLHTTP); xmlHttp.open(“GET“,url, false); xmlHttp.send(null); If(xmlHttp.readyState = 4 server.asp的代码很简单,只输出了两行文字。 server.asp 单击按钮之后,对话框就显示出了服务端返回的文字,如图5-1所示。 图5-

20、1 XMLHTTP使用举例 从该例可以看出,XMLHTTP对象的使用是非常简单的,创建对象、设置参数、发送数据,然后处理返回的数据即可。 5.2 ServerXMLHTTP的使用 在服务端应该使用ServerXMLHTTP对象,而不是XMLHTTP对象。此时,请求的URL必须是完整的,应该以http:/或https:/开头,不能使用相对URL。 第6章 正则表达式的使用 6.1 基本概念 相信大家都做过在文本中查找或替换字符串这种操作。比如将“String”都替换为“string”,在编辑器的查找栏中输入“String”,替换栏中输入“string”,替换所有即可,很简单。 但是,如果想把“i

21、mga.gif/img”替换为“”(图片的文件名是不固定的),或把所有大写的HTML标签替换为小写的,这样的要求就有些困难了,这正是正则表达式大显身手的 时候。 正则表达式(Regular Expression)是进行复杂查找替换的强有力工具。说它是工具又有些不太合适,因为一个正则表达式本身真的只是一个字符串而已,当然它有自己特殊的组成结构和语法。 很多编程语言(如Perl、PHP、.NET、Java、JavaScript和VBScript等)和编辑工具(如Emeditor)都是支持正则表达式的,但是,它们使用的正则表达式引擎是不同的。正则表达式引擎(以下简 称“正则引擎”)就是根据正则表达式

22、对文本进行处理的程序。各种语言中的正则语法其实只是提供了一个调用接口而已,我们通过语句设置表达式,设置一些必要的参数,并执行查找替换,此时正则引 擎被自动调用,它努力工作并返回结果,正则引擎才是最终结果的决定者。各种语言的正则引擎基本上都是各自创建的,它们支持的功能和处理结果略有不同。所以,切换编程语言时,原有的正则表达式 可能需要略加修改。 由于ASP的脚本语言通常是VBScript,所以下文主要讲解VBScript中的正则表达式。VBScript从5.0版本开始就已经支持正则了,而这个版本是随着IE5而来的,所以服务器是否支持正则这个问题是不 用担心的。 第6章 正则表达式的使用 6.1

23、基本概念 相信大家都做过在文本中查找或替换字符串这种操作。比如将“String”都替换为“string”,在编辑器的查找栏中输入“String”,替换栏中输入“string”,替换所有即可,很简单。 但是,如果想把“imga.gif/img”替换为“”(图片的文件名是不固定的),或把所有大写的HTML标签替换为小写的,这样的要求就有些困难了,这正是正则表达式大显身手的 时候。 正则表达式(Regular Expression)是进行复杂查找替换的强有力工具。说它是工具又有些不太合适,因为一个正则表达式本身真的只是一个字符串而已,当然它有自己特殊的组成结构和语法。 很多编程语言(如Perl、PH

24、P、.NET、Java、JavaScript和VBScript等)和编辑工具(如Emeditor)都是支持正则表达式的,但是,它们使用的正则表达式引擎是不同的。正则表达式引擎(以下简 称“正则引擎”)就是根据正则表达式对文本进行处理的程序。各种语言中的正则语法其实只是提供了一个调用接口而已,我们通过语句设置表达式,设置一些必要的参数,并执行查找替换,此时正则引 擎被自动调用,它努力工作并返回结果,正则引擎才是最终结果的决定者。各种语言的正则引擎基本上都是各自创建的,它们支持的功能和处理结果略有不同。所以,切换编程语言时,原有的正则表达式 可能需要略加修改。 由于ASP的脚本语言通常是VBScr

25、ipt,所以下文主要讲解VBScript中的正则表达式。VBScript从5.0版本开始就已经支持正则了,而这个版本是随着IE5而来的,所以服务器是否支持正则这个问题是不 用担心的。 6.2 正则对象的使用 6.2.1 基本语法 创建正则对象,直接使用New关键字即可,举例如下: Set regEx = New RegExp 正则对象的属性如表6-4所示。 表6-4 正则对象的属性 创建正则对象后,使用Pattern属性设置要使用的正则表达式,其他3个属性可根据需要进行设置。 正则对象的方法如表6-5所示。 表6-5 正则对象的方法 6.3 实例演示 6.3.1 UBB中Code标签的替换 在

26、UBB中,“code”和“/code”之间的内容被认为是代码,不应该进行任何替换,应该原样输出。由于内容中可能有“font”“size”和“color”等其他UBB标签,所以难点就在于,如何不 替换Code标签之内的UBB标签。 保持Code标签中的UBB标签不变,有两种办法。一种是先替换UBB标签,然后将Code标签内被错误替换的UBB标签再替换回来。这种处理方法比较烦琐,替换回来这个步骤也比较难以操作。另一种 是先查找Code标签,然后只对Code标签之外的内容执行UBB标签替换,这种办法相对清晰简洁一些,本例将采用此办法。 为了简化范例,对于嵌套Code标签的情况暂不考虑,多个Code标

27、签只能并列排布,内容的结构如图6-13所示。 图6-13 Code标签的结构 那么,处理过程是怎样的呢?首先,查找第一对Code标签,得到起始和结束位置,对Code标签之前的内容进行UBB替换,然后在Code标签之后查找下一对Code标签,替换两对Code标签之间的内 容,如此反复,直到后面没有Code标签为止。 由于每次只需查找一对Code标签,所以Global属性可以设置为False,这样正则引擎在得到一个匹配结果后就会结束查找。查找表达式可以简单地写为“code.*?/code”,范例代码如下所示。 CodeTagReplace.asp $2“) regEx.Pattern = “siz

28、e=(.*?)(.*?)/size“ str = regEx.Replace(str,“$2“) ReplaceOtherUBB = str End Function 创建正则对象 Set regEx = New RegExp regEx.Global=False regEx.Pattern = “code(.*?)/code“ 要处理的文本 str = “这道size=6烤排骨/size,是用size=5font=黑体浓缩橙汁/font/size做的,code还添加了size=5陈皮/size和font=隶书柠檬/font,吃起来口感更加浓郁,/codesize=5酸甜/size 保存结果的

29、字符串 result = “ 进行循环替换 Set Matches = regEx.Execute(str) Do While Matches.count 0 beforeStr = mid(str,1,Matches(0).FirstIndex) codeStr = Matches(0).SubMatches(0) afterStr = mid(str,Matches(0).FirstIndex + Matches(0).Length + 1) response.write “之前的文本:“ & beforeStr & “ response.write “匹配的文本:“ & codeStr

30、& “ response.write “之后的文本:“ & afterStr & “ 替换之前的文本 result = result & ReplaceOtherUBB(beforeStr) 替换Code标签的内容 result = result & “ & codeStr & “ 之后的文本作为待处理文本 str = afterStr 继续匹配 Set Matches = regEx.Execute(str) Loop 最后一段不能匹配的文本也要替换 result = result & ReplaceOtherUBB(str) % 运行结果如图6-14所示。 图6-14 Code标签的替换结

31、果 在程序中,每次匹配成功后,都将Code标签之后的文本重新作为待处理文本,这样待处理文本就越来越少,直至找不到Code标签退出循环。在循环匹配时,一定要注意变化待处理文本,因为执行 Execute方法时,正则引擎是从文本起始位置开始查找,如果文本不变化,那么永远可以匹配到结果,就无法退出循环了。 第7章 文件上传与下载 7.1 上传文件简介 7.1.1 对表单的要求 通过表单上传文件,表单的提交方式必须为Post,即使用method=“post“,同时必须指定编码方式为multipart/form-data,即使用enctype=“multipart/form-data“。如果没有指定enc

32、type或者指 定为application/x-url-encoded,则提交表单时,浏览器不会提交文件内容,只会提交文件路径。 编码方式使用multipart/form-data时,所有表单项目的name、value及文件内容均以二进制形式提交,不会进行URL编码。与编码方式application/x-url-encoded相比,以二进制形式提交可以节省 大量时间,更适合于传输大量的数据。 编码方式使用multipart/form-data后,在服务器端ASP程序中就不要再使用Request.Form集合了,它那样是取不到数据的。Request.Form集合是针对表单使用编码方式applic

33、ation/x-url-encoded 的情况设计的,它无法解析编码方式为multipart/form-data时提交的数据。 以下还有一些细节需要注意: 1)文件框是不能选择目录的,它只能选择一个文件。要上传几个文件,表单中就要有几个文件框。 2)文件框的值不能通过JavaScript等脚本设定,必须由用户自己选择,这是出于安全的考虑。 3)没有客户端软件的支持是无法实现断点续传的,因为浏览器总是发送文件的全部数据。 4)文件框的外观样式很难设定,想美化的话,只能间接实现。 5)大多数浏览器上传文件的大小上限是2GB。 第7章 文件上传与下载 7.1 上传文件简介 7.1.1 对表单的要求

34、通过表单上传文件,表单的提交方式必须为Post,即使用method=“post“,同时必须指定编码方式为multipart/form-data,即使用enctype=“multipart/form-data“。如果没有指定enctype或者指 定为application/x-url-encoded,则提交表单时,浏览器不会提交文件内容,只会提交文件路径。 编码方式使用multipart/form-data时,所有表单项目的name、value及文件内容均以二进制形式提交,不会进行URL编码。与编码方式application/x-url-encoded相比,以二进制形式提交可以节省 大量时间,更

35、适合于传输大量的数据。 编码方式使用multipart/form-data后,在服务器端ASP程序中就不要再使用Request.Form集合了,它那样是取不到数据的。Request.Form集合是针对表单使用编码方式application/x-url-encoded 的情况设计的,它无法解析编码方式为multipart/form-data时提交的数据。 以下还有一些细节需要注意: 1)文件框是不能选择目录的,它只能选择一个文件。要上传几个文件,表单中就要有几个文件框。 2)文件框的值不能通过JavaScript等脚本设定,必须由用户自己选择,这是出于安全的考虑。 3)没有客户端软件的支持是无法

36、实现断点续传的,因为浏览器总是发送文件的全部数据。 4)文件框的外观样式很难设定,想美化的话,只能间接实现。 5)大多数浏览器上传文件的大小上限是2GB。 7.2 无组件上传 无组件上传,就是在服务器没有安装第三方上传组件的情况下,通过ASP内置的方法及常见组件来实现文件上传。 7.3 AspUpload组件 AspUpload组件是Persits公司的一款产品,它功能齐全、性能卓越、使用简便,大多数主机空间都支持它。AspUpload组件是收费的商业产品,官方网址为http:/,可以访问该 网站下载最新的试用版本。 AspUpload组件的部分功能特色如下: 可以一次上传多个文件。 可以存取

37、表单中的文本项目。 支持上传进度条。 支持Unicode。 可以变更文件属性。 可以将文件作为BLOB保存到数据库中。 支持MS Access的OLE Object的Head部分。 支持从数据库中导出文件。 可以自动生成唯一的文件名,避免与存在的文件冲突。 可以限制上传文件的大小。 可以保持文件的“上次修改”时间戳。 支持加密。 可以列出目录经过排序的列表。 支持文件复制、移动和删除。 支持目录的创建和删除。 处理BLOB数据时,可以提供完整的ADO支持。 支持MacBinary。 支持目录上传(客户端需要使用XUpload或Jupload)。 可以提取图片的尺寸和类型。 7.4 FileUp

38、组件 FileUp组件是SoftArtisans公司的一款产品,它具有齐全的功能和卓越的性能,与Asp-Upload组件齐名。FileUp组件也是收费的商业产品,官方网站为http:/。 FileUp组件的部分功能特色如下: 支持数据库的上传和下载。 支持上传的交易控制。 支持上传进度条。 包含性能监视计数器,可以监视上传和下载的性能。 支持MD5,可用来验证上传数据的完整性。 支持目录的递归上传(需要客户端使用JFile或Xfile)。 支持Unicode的文件名或Form Value。 可以上传到内存,更加安全。 支持下载的断点续传(需要客户端工具支持)。 支持MacBinary。 可以修

39、改文件的权限。 可以注册DLL文件。 7.5 防范上传漏洞 网站具有上传功能,就相当于对外保留了一个入口。如果对上传的数据不进行严格的验证,用户就可能上传ASP木马、病毒、黑客工具等恶意文件,通过系统漏洞进一步控制服务器,轻则泄露程序源 代码,重则丢失重要数据、商业机密等信息。近些年来,一些知名网站、企业和部门的网站都被发现过上传漏洞,某论坛的上传漏洞更是导致无数小网站被黑,而问题的根源可能仅仅是程序员在设计时考 虑不周。 7.6 下载文件 下载文件的请求通常都是由IIS直接处理的,我们无需插手,但以下一些场合可能需要通过程序来控制下载,如: 希望点击链接时,可以下载文本文件或图片文件,而不是

40、在浏览器中直接打开。 需要验证用户是否有下载的权限。 出于安全的考虑,需要将文件放在Web目录之外。 服务器限制了可以直接下载的文件类型。 通过ASP程序下载文件时,需要将下载的链接地址指向对应的ASP文件,ASP文件需要输出必要的Head信息和文件数据,必要时,可以在URL中传递ID或文件路径之类的信息。使用此种方式下载文件 时,所有的数据都是通过ASP引擎输出的,下载效率会比IIS直接处理有些下降,所以,此种方式只适用于下载较小的文件。 第8章 图片处理 8.1 AspJpeg组件 8.1.1 组件简介 AspJpeg组件是最常用的图片处理组件,它功能强大,使用广泛,支持JPEG、GIF、

41、BMP、TIFF和PNG格式图片,可以进行图片的缩放、裁剪、锐化等常用操作,支持自由画图,支持EXIF信息读取 等。 AspJpeg组件的官方网站是http:/,可以从这里下载最新版的试用版组件。 第8章 图片处理 8.1 AspJpeg组件 8.1.1 组件简介 AspJpeg组件是最常用的图片处理组件,它功能强大,使用广泛,支持JPEG、GIF、BMP、TIFF和PNG格式图片,可以进行图片的缩放、裁剪、锐化等常用操作,支持自由画图,支持EXIF信息读取 等。 AspJpeg组件的官方网站是http:/,可以从这里下载最新版的试用版组件。 8.2 自由画图 自由画图需要使用Canvas对象

42、,通过AspJpeg对象的Canvas属性可以得到它,然后调用它的各种画图方法即可。 8.3 图片处理 8.3.1 图片缩放 缩放图片很简单,直接设置新的宽度或高度即可。建议将PreserveAspectRatio属性设置为True,这样可以保持宽高的比例。 范例代码如下所示。 resizeImage.asp “ response.write “原始宽度:“ &jpeg.OriginalWidth & “ response.write “原始高度:“ &jpeg.OriginalHeight & “ 设置新宽度 jpeg.width = 150 jpeg.Save Server.MapPath

43、(“thinkerResize1.jpg“) 重新打开,设置新宽度 jpeg.Open Server.MapPath(“thinker.jpg“) jpeg.PreserveAspectRatio = true 保持比例 jpeg.width = 150 jpeg.Save Server.MapPath(“thinkerResize2.jpg“) 设置高度 jpeg.height = 150 jpeg.Save Server.MapPath(“thinkerResize3.jpg“) 释放变量 Set jpeg = nothing % 运行结果如图8-13所示。 图8-13 图片缩放 8.4

44、GIF动画 GIF格式的优点是支持背景透明和动画显示,缺点是支持的颜色数较少。AspJpeg组件从2.0版本开始,单独提供了Gif对象进行GIF动画的处理。 8.5 PNG格式 8.5.1 输出为PNG图片 从2.1版本开始,AspJpeg组件支持输出PNG格式的文件,只需要在保存文件前将PNGOutput属性设置为True即可。 范例代码如下所示。 resizePng.asp 运行结果如图8-31所示。 图8-31 输出为PNG格式 第9章 邮件发送 9.1 Email简介 9.1.1 Email收发流程 从用户的角度来看,Email的收发过程非常简单。发件人填好收件人地址及内容,单击“发送

45、”按钮,然后收件人单击“接收”按钮就收到了邮件。邮件似乎是从发件人直达收件人的,但实际的流程要 稍微复杂一点,简化的流程如图9-1所示。 图9-1 邮件发送流程 图形比较简略,实际上,一封Email可能途经局域网、网关、防火墙、路由器和中继服务器等各种设备。收件人的邮件服务器也可能将邮件转存到专门的服务器,供用户取信使用。 发信人的客户端软件与发件人邮件服务器之间,通过SMTP协议进行交流。邮件服务器之间也是使用SMTP协议的。收件人的客户端软件与收件人邮件服务器之间是通过POP3或IMAP等协议交流的。 SMTP协议是发信的协议,而POP3或IMAP是收信的协议。 第9章 邮件发送 9.1

46、Email简介 9.1.1 Email收发流程 从用户的角度来看,Email的收发过程非常简单。发件人填好收件人地址及内容,单击“发送”按钮,然后收件人单击“接收”按钮就收到了邮件。邮件似乎是从发件人直达收件人的,但实际的流程要 稍微复杂一点,简化的流程如图9-1所示。 图9-1 邮件发送流程 图形比较简略,实际上,一封Email可能途经局域网、网关、防火墙、路由器和中继服务器等各种设备。收件人的邮件服务器也可能将邮件转存到专门的服务器,供用户取信使用。 发信人的客户端软件与发件人邮件服务器之间,通过SMTP协议进行交流。邮件服务器之间也是使用SMTP协议的。收件人的客户端软件与收件人邮件服务

47、器之间是通过POP3或IMAP等协议交流的。 SMTP协议是发信的协议,而POP3或IMAP是收信的协议。 9.2 CDOSYS组件 CDOSYS组件是Windows系统内置的发信组件,无需安装,基本所有的主机空间都支持它。 CDOSYS组件最主要的对象是Message对象,使用以下语句即可创建。 Set message = Server.CreateObject(“CDO.Message“) 9.3 JMail组件 JMail是Dimac公司开发的邮件收发组件,非常成熟,也很强大。JMail组件分为免费版、标准版和专业版,由于它的免费版本支持大部分的发信功能,所以该组件使用得也非常广泛,大部

48、分主机空间 都支持它。 JMail组件最主要的对象是Message对象,使用以下语句即可创建。 Set message =Server.CreateObject(“JMail.Message“) 9.4 AspEmail组件 AspEmail组件是Persits公司的一款产品,应用比较广泛。它的免费版本支持常用的一些基础功能,而某些功能需要付费注册后才能使用,如消息队列、内嵌图片、Quoted-Printable格式和 multipart/alternative的支持等。 AspEmail组件最主要的对象是MailSender对象,使用以下语句即可创建: Set Mail = Server.CreateObject(“Persits.MailSender“)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/环境 > 建筑资料


经营许可证编号:宁ICP备18001539号-1