|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
大家可以自己去看一看.可以说看得想呕吐.以前有次下了个动网来看.里面连基本内置函数的保护措施(函数没防御性)都没有.难怪经常补这个补那个了.可能现在.NET版会好点吧 比来在单元做的一个项目里需求有文件上传的功效,正好手头一本书的附赠光盘里有一个上传组件,心中大喜。惋惜随之便发明这是一个试用版,不给钱就只能用50次,太吝啬了!!好在头头催得不紧,工夫丰裕,爽性本人试着做一个,既可长经历值,又能长成绩感,不试白不试!以下引见的即是俺折腾了两天半捣鼓出来的一个只能说是雏形的玩意,戋戋三十行代码,大侠们不要笑俺哦,这只是写授与俺一样猎奇心强但经历值低的弟兄们看的。
文件上载所需的第一步固然是进入一个有“file”表单位素的页面,详细就不说了,人人都晓得。然而若想做一个可以承受该文件而且将其保留到办事器硬盘上的组件,必需晓得所提交的原始数据的怎样一个容貌才行。做到这一点其实不难:
<%
Dim FormData,FormSize
FormSize=Request.TotalBytes
FormData=Request.BinaryRead(FormSize)
Response.BinaryWrite FormData
%>
由于需求读取的是前一个页面提交来的原始字节数据,因而不克不及利用Request.Form()办法,必需利用BinaryRead办法,而且一旦利用了这个办法,就不克不及再在统一个页面中利用Form()办法了,反之亦然。基于一样的事理,向页面输入时也必需利用BinaryWrite办法,不外这其实不妨害你持续利用Response.Write办法。
鄙人面的描写中假定阅读者选择上传的文件是一个GIF图片,你会发明这段代码运转的了局并非在阅读器上显示出这幅图片,而只是输入了一堆根基上是七零八落的字符:
-----------------------------7ce20d227c0232
Content-Disposition: form-data; name="file"; filename="C:\mypic.gif"
Content-Type: image/gif
GIF89a ??!?{7iv}$挝顿排湃缺哪浇爬⒖咯技Φ档北发创虐{x勃ゥノ味偎排湃缺哪浇爬⒖咯技Φ档北发创虐{x勃ゥゥ|x|Zr?Zxt??p{{{zzszzlsssnarrjjjrreccfffdXfffddjj^fffddZ__UZZZYYSWWMRRRRRJ_BBKKK?IIB? ??W::AAA?S;?-----------------------------7ce20d227c0232--
不奇异,这就对了!由于原始数据其实不仅仅是图片文件自己的数据,它还包括有对该文件在用户硬盘上的途径、类型、提交页面的表单域名等相干信息的描写,和头尾两段根基不异的标识(即“-----------------------------7ce20d227c0232”),我想这对标识应当是在表单中含有多个元素时起朋分感化的。两头的那段数据,即以“GIF89a”开首,直到最初一个“;”,才是咱们所想失掉的GIF图片文件的数据。若想让阅读器可以显示出这幅图片,固然得先把这些不需求的内容去失落再向页面输入。因而上面该做些甚么就很了然了。
第一步,掐头:
“头”与图片数据的分界限就是两对回车换行符(在阅读器中是看不到“GIF89a”之前的谁人空白行的,得把输入了局粘贴到写字板里去研讨,记事本也不可)。
Dim DataStart,CLStr
CLStr=ChrB(13) & ChrB(10)
DataStart=InStrB(FormData,CLStr & CLStr)+4
个中的4是两对回车换行符的长度,别的要注重这里都是在针对字节数据停止操作,而不是字符,因而不要用错了函数,少敲了个“B”就完整得不到准确了局了。
第二步,去尾:
“头”有多大算是弄清了,那尾呢?不急,先获得开首那段标识的详细内容,注重它的开头处是一对回车换行符:
Dim DivStr
DivStr=LeftB(FormData,InStrB(FormData,CLStr)-1)
由于咱们将要利用MidB办法截取图片数据,所以接上去需求弄清晰整段图片数据的字节数,就用后面已界说了的DataSize变量:
DataSize=InStrB(DataStart+1,FormData,DivStr)-DataStart-2
为何要减2呢?由于末尾那段标识之前也有一对回车换行符。至此,图片数据即可以很等闲地失掉并在阅读器上输入了:
FormData=MidB(FormData,DataStart,DataSize)
Response.BinaryWrite FormData
不外我想你必定不会知足于到此为止的,由于还没有存盘呢!固然我也不会做到这里便出工,不然是没法向头头交差的。后面所切磋的这些内容都还只局限在地道的ASP剧本法式局限内,并没有触及到组件手艺。其实我一入手下手并没有想向这方面勉力,只想靠ASP处理成绩,惋惜FileSystemObject没告知我它可以往硬盘上写二进制文件,在这个服装论坛上问了半天也没人睬我,只好本人下手编组件了。
不外接上去的进程其实不像想象中的那样困难。
所要做的这个组件的功效很复杂,只供应了一个办法:SaveFile(Pathname),在这个办法内,法式起首获得上传页面所提交的文件的字节数据,就象前文所述的剧本法式一样,然后再将这些数据写到办事器硬盘上由参数Pathname所指定的一个二进制文件内,一切便半途而废了,至于若何使这个组件进一步完美些,呵呵,今后渐渐来吧。
详细怎样做呢?翻开VB,然后请听下回分化。
源代码保护方面其实现在考虑得没那么多了..NET也可以反编译.ASP写得复杂的话别人能看得懂的话.他也有能力自己写了.这方面担心的倒不太多. 纵观现在网上可以下载的那些所谓BBS还有什么网站等等的源代码 |
|