网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > ASP实例
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.采用XMLHTTP编写一个天气预报的程.
.用XML+FSO+JS实现服务器端文件的.
.ASP中实现文件上传方法的研究.
.使用asp实现支持附件的邮件系统(.
.用asp实现QQ在线查询.
.用EasyMailObject组件处理Exchan.
.ASP网站远程客户实现EXCEL打印功.
.使用JScript.NET创建asp.net页面.
.一个简单的网上书城的例子(七).
.ASP.NET发送ICQ信息DIY(1).
.用户注册及跟踪代码(一).
.网络寻呼机数据库版显示历史消息.
.Jmail发信的实例,模块化随时调用.
.ASP进阶之文章在线管理更新(11).
.使用 ASP+ 列表绑定控件(下).
.用ASP和SQL实现基于Web的事件日历.
.如何使用FSO搜索硬盘文件.
.WSH 直接将查询数据结果生成 EXC.
.利用ASP打造网站论坛DIY.
.构建你的网站新闻自动发布系统之.

用VB6做一个简单的文件上传组件(一)

发表日期:2000-10-20


最近在单位做的一个项目里需要有文件上传的功能,正好手头一本书的附赠光盘里有一个上传组件,心中大喜。可惜随之便发现这是一个试用版,不给钱就只能用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    垐??!?倇挌7昳聉}$挝顿藶排湃缺哪浇爬⒖咯技Φ档北发创熍皗獂勃姰畾棩ゥ挝顿藶排湃缺哪浇爬⒖咯技Φ档北发创熍皗獂勃姰畾棩ゥゥ挗|櫃櫇潒櫃嚈櫃殦x敂儘崓潅倢寍檱Z杹r?杽Z剟剠厁儍t??p{{{zzszzlsss媙arrj僯jrreccfff乨Xfffddjj^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,然后请听下回分解。

上一篇:趣味访客计数器设计两则 人气:11492
下一篇:用VB6做一个简单的文件上传组件(二) 人气:14752
浏览全部上传组件的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐