动态网站制作指南



当前位置 > 网站建设学院 > 网络编程 > ASP实例 Rss
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket

用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,然后请听下回分解。

关注此文的读者还看过:
·2012-5-22 17:30:37 XMLHTTP+Javascript+Asp写得聊天室,无刷新实现(四)
·2012-5-22 17:26:51 简单ASP论坛DIY
·2012-5-22 17:26:21 在一个ASP页面停留的多少时间的程序
·2012-5-22 17:24:19 用ASP创建日志文件(附源程序)
·2012-5-22 17:19:53 用ASP制作个性化的调查板(附源程序)
·2012-5-22 17:16:56 用ASP让用户访问指定页面
·2012-5-22 17:15:36 用ASPJPEG组件制作图片的缩略图和加水印
·2012-5-22 17:13:48 有关站内模糊查询的源程序! 
·2012-5-22 17:12:08 数字和字母组合并生成图片的验证码祥解
站长推荐 PS笔刷下载 在线翻译 系统进程 广告代码
  发表评论
姓 名: 验证码:
内 容:
教程搜索服务
ASP源码推荐
·百尔买商城管理系统(无限制版本
·ownerstool站长工具 v1.0 源码版
·追米网pr查询代码
·企业网上管理0A系统-完美修正版
·创想设计Flash相册
·瑞格咖咖食品公司全站
·时代自助连接 V1.0
·小K在线网络相册 v1.40
·服务器监视 MyIIS.Monitor(附瞬
·Yxbbs v3.0 For CC视频版
·仿Chinaz的Alexa排名查询系统
·Berlinet装饰行业企业网站系统
项目外包信息
·寻会php的程序员外包网站
·派桑网络-网络营销专家
·汽车配件网站制作 50000元
·整站SEO优化
·课件门户网程序
·求长期合作网站设计制作高手
·公司网站重新改版 8000元
·asp企业网站小改动
·网站flash片头
·文化传播公司网站设计稿
·UI界面设计
·产品外观改版设计 15000元
·照明灯具网站设计 10000元
·求长期合作网站设计制作高手
·做B2C网站 20000元
发布信息 浏览信息
邮件订阅服务
输入你的邮件地址,你将不会错过任何关于<ASP实例>的内容


网络编程文章分类
ASP教程
ASP实例
ASP技巧
ASP文摘
PHP教程
PHP技巧
PHP实例
PHP文摘
JSP教程
JSP技巧
JSP实例
JSP文摘
ASP.NET教程
ASP.NET技巧
ASP.NET实例
ASP.NET应用
xml教程
xsl教程
xml技巧
C#教程
C#应用
Delphi教程
Perl教程
Shell教程
Ajax教程
Visual Basic教程
Java教程
J2EE/J2ME教程
C/C++教程
移动解决方案
移动短信技术
移动行业动态
软件工程
WordPress
Android开发
站长工具:Google PR查询|Alexa排名查询|网站速度测试|CSS在线编辑器|OPEN参数生成器|弹出式窗口代码产生器|密码登录生成器|在线按钮生成器|Meta标签生成器|邮箱图标在线生成|多色彩特效字代码生成器|网页代码调试器|在线FTP登陆|Flash取色器|配色代码对照表|配色辞典|CSS生成器|CSS在线压缩|广告代码|框架网页代码生成器|js/vbs加密|md5加密|进制转换|UTF-8 转换工具|在线调色板|Html转换js|Html转换asp|Html转换php|Html转换perl
实用工具:汉字翻译拼音|拼音字典|在线翻译|天气预报|火星文|在线网速测试|符号对照表|个税计算|理财工具|黄金价格|购房银行按揭利率计算|汇率查询|经典小工具|汉字简繁转换|普通单位换算|公制单位换算|生辰老黄历|国内电话区号|国家代码与域名缩写|文字加密解密|元素周期表|健康查询|世界时间|全国各地车牌查询|全国车辆交通违章查询|万年历|二十四节气|汉字横竖排版|手机号码查询|计算器|ip搜索|酒店预订|机票预订
广告刊登 | 版权声明 | 联系我们 | 加入收藏 | RSS订阅
Copyright © 2000-2012 www.knowsky.com All rights reserved | 沪ICP备05001343号