仓酷云

标题: ASP教程之ASP无组件上传・从道理分析到理论(上)... [打印本页]

作者: 变相怪杰    时间: 2015-2-3 23:41
标题: ASP教程之ASP无组件上传・从道理分析到理论(上)...
只要你想学,就没什么优缺点,上面那位大哥已经把网上的评论说了,但我认为想学哪个都一样,不然它就不可能在当今时代数字艺术方面存活到今天上传|无组件   无组件上传一向是困扰人人的一个成绩。其实道理很复杂,中心就是剖析字符串。然而,实践操作时,却坚苦重重。个中的关头成绩仍是人人常常对道理的分析不敷深切,或是由于进程过于繁琐,招致bug不休。一向以来,都想做一个完美的例子,只不外想一想就头痛,加上没工夫(托言,呵呵 ),所以没有付诸举动。

明天就咬咬牙,给人人供应一个完全的无组件上传的例子。由于自己耐性欠好,所以我们一点一点来,分几天完成。将来的几天,我会每天更新这个文档,这个进程也是人人进修和进步的进程。

(完全的源码和示例,可以在这里找到:http://www.2yup.com/asp/attach/A0000006.zip)

==============================================================
第一天:熟悉咱们的剖解对象――数据

上传文件时,起首要晓得咱们失掉的是甚么。上面是一个上传文件的表单,咱们就从他入手下手。
<form action="doupload.asp" method=post enctype="multipart/form-data">
file1申明:<input type=text name=file1_desc>  
file1<input type=file name=file1><br>
file2申明:<input type=text name=file2_desc>  
file2<input type=file name=file2><br>
<input type=submit name=upload value=upload>
</form>

表单中enctype="multipart/form-data"的意思,是设置表单的MIME编码。默许情形,这个编码格局是application/x-www-form-urlencoded,不克不及用于文件上传;只要利用了multipart/form-data,才干完全的传递文件数据,停止上面的操作(有乐趣的伴侣,可以本人碰运气二者的异同。办法很复杂,就是把这一句去失落)。如今,咱们在表单平分别填入数据:
file1的申明 D:\我的 图片\BACK046.GIF
file2的申明 D:\我的 图片\BACK293.GIF

这里用了中英文、空格混排。目标是让例子更有普通性。我选的这两个图片分离是54和62字节。大图片的道理完整一样,不外小图片做例子更适合些,道理轻易展示。
为了看到咱们失掉的数据,在doupload.asp里,有这几行代码:
<%
formsize=request.totalbytes
formdata=request.binaryread(formsize)
response.BinaryWrite(formdata)
%>

很复杂,感化就是打出来传过去的一切数据。假如不熟习,你可以先研讨一下request和response对象的这两个办法。

提交表单,咱们在ie外面检查html源,失掉:
-----------------------------7d22131090458
Content-Disposition: form-data; name="file1_desc"

file1μ??μ?÷
-----------------------------7d22131090458
Content-Disposition: form-data; name="file1"; filename="D:\?òμ? í???\BACK046.GIF"
Content-Type: image/gif

GIF89a‘ì?f?f3?ì???ì!ù,@?.á?o ;

-----------------------------7d22131090458
Content-Disposition: form-data; name="file2_desc"

file2μ??μ?÷
-----------------------------7d22131090458
Content-Disposition: form-data; name="file2"; filename="D:\?òμ? í???\BACK293.GIF"
Content-Type: image/gif

GIF89a(‘???YYYììì!ù,(@L€?j(・"j?N(34ˉ;
-----------------------------7d22131090458
Content-Disposition: form-data; name="upload"

upload
-----------------------------7d22131090458--

不必嫌疑,这就是你从上一个“复杂”表单传过去的器材。如今想一想看,怎样凑合这一堆器材?是否是看上去有纪律,又不晓得从何下手?今天,我们就剖析一下这堆“图片”,看看怎样分别出咱们要的内容。


==============================================================
第二天:分拆初步

睡了个好觉,人人头脑苏醒多了吧?明天午时吃的暖锅,阿森纳vs.铁哥也没看完,如今一头脑大油。。。
OK,我们持续研讨这个单调的成绩。起首,要找出纪律。看上去仿佛很复杂,就是用
-----------------------------7d22131090458
做分隔,如许,每个文本单位里,都是
Content-Disposition: form-data; name="表单域的名字";

表单域的内容

而每个文件单位里,都是
Content-Disposition: form-data; name="表单域的名字"; filename="文件全途径"
Content-Type: 文件类型

文件的二进制内容

那末,是否是直接用
split(formdata,"-----------------------------7d22131090458")
就能够失掉各个单位了呢?谜底是不是定的。起首,formdata不是字符串而是二进制串,不克不及用split的办法;其次,这里的7d22131090458其实不固定,每次城市有变更,其实不合适做分隔符。所以,应当用一个更保险的举措。想到没?很复杂――就用formdata的第一行做分隔符。只需用instrb函数失掉换行符的地位,然后用leftb或midb函数截取数据就好了。咱们下手尝尝:
<%
' 二进制的回车<return>
bncrlf=chrB(13) & chrB(10)

' 失掉formdata
formsize=request.totalbytes
formdata=request.binaryread(formsize)

' 失掉分隔符
divider=leftB(formdata,clng(instrb(formdata,bncrlf))-1)

' 看看对不合错误?
response.BinaryWrite(divider)
%>

运转。。。胜利了!失掉了需求的divider。注重,这里的字符串函数都是针对二进制数据操作的,所以,用的是他们的二进制版,加了“b”(binary的首字母)――instrb,leftb(今后能够还呈现rightb,midb,lenb。。等等)。究竟,formdata是用“binaryread()”失掉的嘛。好了,有的分隔符,就能够失掉数据了。咱们从复杂的入手下手,先拿第一个单位出来看看,方针是失掉表单域称号和数据。
<%
' 这是回车<return>
bncrlf=chrB(13) & chrB(10)

' 失掉数据
formsize=request.totalbytes
formdata=request.binaryread(formsize)

' 失掉divider,分隔符
divider=leftB(formdata,clng(instrb(formdata,bncrlf))-1)

' 肇端地位
startpos = instrb(formdata,divider)+lenb(divider)+lenb(bncrlf)
' 终止地位,从肇端地位入手下手到下一个divider
endpos = instrb(startpos, formdata, divider)-lenb(bncrlf)
part1 = midb(formdata, startpos, endpos-startpos)
response.BinaryWrite(part1)
%>

这一段有正文,信任人人没成绩。假如对这些函数不懂得,可以到http://www.2yup.com/asp/referrence/index.asp下载msdn参考看看vbscript的函数用法,对进步程度有很大匡助。
这时候候失掉的了局可以经由过程检查生成的html源的体例看到:
Content-Disposition: form-data; name="file1_desc"

file1的申明
</p>  对用户来说可预见费用、节约费用,可以做到花少钱办大事。由于省去了购买软件和硬件等的前期费用,用户可以租用较高级的应用软件。ASP的收费是根据软件的类型、客制化程度、用户数量、服务期限来定的,对客户来说这笔费用是可以预见的。方便于客户应用软件的升级。
作者: 只想知道    时间: 2015-2-9 16:40
如何更好的使自己的东西看上去很不错等等。其实这些都不是问题的实质,我们可以在实践中不断提升自己,不断充实自己。
作者: 若相依    时间: 2015-2-10 08:04
从事这个行业,那么你可以学ASP语言,简单快速上手,熟练dreamweav排版,写asp代码,熟练photoshop处理图片,打好基础就行了
作者: 山那边是海    时间: 2015-2-12 16:28
弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。
作者: 因胸联盟    时间: 2015-3-3 03:45
用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。
作者: 飘灵儿    时间: 2015-3-4 15:15
那么,ASP.Net有哪些改进呢?
作者: 深爱那片海    时间: 2015-3-11 20:10
掌握asp的特性而且一定要知道为什么。
作者: 再见西城    时间: 2015-3-18 11:30
Server:这个表示的服务器,操作服务器的一些东西使用这个,如Server.Mappath转换服务器路径,Server.CreateObject实例化一个组件
作者: 不帅    时间: 2015-3-24 08:41
你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。
作者: 海妖    时间: 2015-3-31 23:01
以HTML语言整合(HTML负责界面上,ASP则负责功能上)形成一个B/S(浏览器/服务器)模式的网页程序。
作者: 小女巫    时间: 2015-4-4 16:51
如何学好ASP,以前也有人问过,把回答给你转过来看看能否对你有帮助:
作者: 精灵巫婆    时间: 2015-4-21 15:11
兴趣爱好,那么你无须学编程,申请一个域名和空间,在网上下载一些免费开源的CMS系统,你不用改代码,只须熟悉它们的后台操作,像office一样简单方便,很快就能建一个站点,很多站长都是这样做的
作者: 兰色精灵    时间: 2015-4-22 10:10
接下来就不能纸上谈兵了,最好的方法其实是实践。实践,只能算是让你掌握语言特性用的。而提倡做实际的Project也不是太好,因为你还没有熟练的能力去综合各种技术,这样只能使你自己越来越迷糊。
作者: 第二个灵魂    时间: 2015-4-28 03:01
最近在学asp,不要问我为什么不直接学.net,因为公司网站是asp做的所以有这个需要,卖了本书asp入门到精通,对里面的六大内置对象老是记不住,还有很多属性和方法看的头晕。
作者: 愤怒的大鸟    时间: 2015-7-1 23:08
掌握asp的特性而且一定要知道为什么。
作者: 变相怪杰    时间: 2015-7-7 08:12
下面简单介绍一下我学习ASP的方法,希望对想学习ASP的朋友有所帮助...
作者: 透明    时间: 2015-7-11 12:08
先学习用frontpage熟悉html编辑然后学习asp和vbscript建议买书进行系统学习
作者: 谁可相欹    时间: 2015-7-22 21:03
我可以结合自己的经验大致给你说一说,希望对你有所帮助,少走些弯路。
作者: 小魔女    时间: 2015-10-2 22:04
以HTML语言整合(HTML负责界面上,ASP则负责功能上)形成一个B/S(浏览器/服务器)模式的网页程序。
作者: 爱飞    时间: 2015-10-13 15:35
ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码,能产生和执行动态、交互式、高效率的站占服务器的应用程序。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2