ASP文件上传神功 第三重:集成类、多语种通用,使用方便

上传

  这个问题已经不是什么新鲜问题了,网上也有大把的教程,但大多数是授人以鱼,而不授人以渔,经过辛苦的资料收集,思考,调试,整理,我基本上已经把这个问题从原理上搞清楚了,现在根据我自己的理解,在范例程序的基础上,加以解释,希望能对部分网友(比我还菜的:-))有所帮助。

  请诸位大虾能对其中的不正或不良这处予以指正。

  程序中stream对象的用法上参考了“化境HTTP上传程序 Version 2.0”在代码,在此对稻香老农和梁无惧表示衷心的感谢和由衷的敬意。

  先来分析一下,为后面的数据分析算法打点基础,以下是我摘录的一小段网页中提交的二进制数据:
-----------------------------7d31ec15102d0
Content-Disposition: form-data; name="txtTitle"

满脑的想法
-----------------------------7d31ec15102d0
Content-Disposition: form-data; name="filImage"; filename="F:\material\木纹背景\pic016.jpg"
Content-Type: image/pjpeg

? JFIF  C

!!E.'.EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE?€" 
 ? } !1AQa"q2亼?#B绷R佯$3br?
侼s歊J佦=ǜ珻,%??Xm 銓鼽?幮??驲湕胄滙C?
儗 g?咶? tS?B矠:u隠c
g不t凄L琰h`啨0p
g殲41?9'$筵奆]眬?膁?摍? 渦"??
-----------------------------7d31ec15102d0
Content-Disposition: form-data; name="btnUpload"

Upload
-----------------------------7d31ec15102d0--

  蓝色的字符的内容我们应该熟悉吧,中间的乱码就是上传的文件的内容,其实我们要做的就是将这一堆数据进行分析,挑出对我们有用的数据保存下来就OK了。分析数据就是查找一些标志性的内容,如回车换行符,“----------”符号,用两个指针确定两个位置,然后提取数据,我的算法不知道好不好,本人的数据结构是学得很烂的,十分sorry。

以下是一个完事的应用,其中的类定义可以与入另一个文件,使用的时候只要用

 <!--include file="LjUpload.cls"-->

命令包含进来就可以了。

LjUpload.asp:

<%@ Language=VBScript %>
<% option explicit %>

<script language=vbscript runat=server>

 private srmRequestData   'adodb.stream对象,保存从form中提交来的所有数据

 private adTypeBinary   'adodb.stream对象的叁数:返回二进制数据
 private adTypeText   'adodb.stream对象的叁数:返回文本数据
 private adModeRead   'adodb.stream对象的叁数:对象可读
 private adModeWrite   'adodb.stream对象的叁数:对象可写
 private adModeReadWrite   'adodb.stream对象的叁数:对象可读写

 class LjUpload   '定义一个类,名称为LjUpload。
  
  private bytCrLf   '单字节的回车换行符,共2字节
  private bytSub   '单字节的“-”符号,共8字节
  private binData    '二进制数据变量,保存一个提交数据的复本,便於操作

  private dicForm   '保存form文本域的信息
  private dicFile   '保存form文件域的信息
  private strName   'form表单的输入域名称
  private strValue   'form表单的输入域值
  private objFile   '文件信息对象,保存文件相关的信息,具体叁看class LjFile的定义

  private posB   '二进制数据读写指针,开始指针
  private posE   '二进制数据读写指针,结束指针
  public Charset   '语言属性设置
  
  private sub Class_Initialize   '类初始化过程
   
   bytCrLf = getSBfromDB(vbcrlf)
   bytSub = getSBfromDB("--------")
   Charset = "gb2312"   '默认语言属性设置为简体中文:gb2312
   
   adTypeBinary = 1   '返回二进制数据
   adTypeText = 2   '返回文本数据
   adModeRead = 1   '对象数据可读
   adModeWrite = 2   '对象数据可写
   adModeReadWrite = 3   '对象数据可读写
  end sub
  
  public sub GetData   '类的打开过程,上传文件及分析数据的过程
   
   set srmRequestData = server.CreateObject("adodb.stream")   '建立一个adodb.stream对象
   
   srmRequestData.Type = adTypeBinary   '指定返回数据类型
   srmRequestData.Mode = adModeReadWrite   '指定打开模式
   srmRequestData.Open   '打开对象
   srmRequestData.Write request.BinaryRead(request.TotalBytes)   '获取所有form提交的数据
   
   srmRequestData.Position = 0   '读写指针重新定位至对象头部,写数据,指针已指向对象尾
   binData = srmRequestData.Read   '在变量中保存提交数据的复本,便於操作
   
   set dicForm = server.CreateObject("scripting.dictionary") '用来保存文本信息
   set dicFile = server.CreateObject("scripting.dictionary") '用来保存文件信息

   posB = instrb(binData,bytSub)   '开始分析所获取的二进制数据
   posB = instrb(posB,binData,bytCrLf) + 2 '+2是加入回车换行符本身的长度
   posB = instrb(posB,binData,getSBfromDB("name=""")) + 6
   do until posB = 6   '控制条件的设置有多种方式,这里的仅供叁考
    posE = instrb(posB,binData,getSBfromDB(""""))
    strName = getTextfromBin(srmRequestData,posB,posE-posB)
   
    posB = posE + 1 '指针移动到“"”的後面
    posE = instrb(posB,binData,bytCrLf)
    
    if instrb(midb(binData,posB,posE-posB),getSBfromDB("filename=""")) > 0 then '这是一个file域
     posB = instrb(posB,binData,getSBfromDB("filename=""")) + 10
     posE = instrb(posB,binData,getSBfromDB(""""))
     set objFile = new LjFile   '建立一个文件信息对象
     if posE>posB then
      objFile.FileName = getFileNamefromPath(getTextfromBin(srmRequestData,posB,posE-posB))   '写入文件名称
      posB = instrb(posB,binData,getSBfromDb("Content-Type:")) + 14
      posE = instrb(posB,binData,bytCrLf)
      o

时间: 2024-12-30 08:48:21

ASP文件上传神功 第三重:集成类、多语种通用,使用方便的相关文章

ASP文件上传神功 第一重(单个图片上传到数据库)

上传|数据|数据库 第一重:单个图片上传到数据库 这个问题已经不是什么新鲜问题了,网上也有大把的教程,但大多数是授人以鱼,而不授人以渔,经过辛苦的资料收集,思考,调试,整理,我基本上已经把这个问题从原理上搞清楚了,现在根据我自己的理解,在范例程序的基础上,加以解释,希望能对部分网友(比我还菜的:-))有所帮助. 请诸位大虾能对其中的不正或不良这处予以指正. 程序中stream对象的用法上参考了"化境HTTP上传程序 Version 2.0"在代码,在此对稻香老农和梁无惧表示衷心的感谢和

ASP文件上传神功 第二重(招势图加内功心法)

上传 第二重:文本信息与图片文件同时提交保存到数据库图片文件也可保存到磁盘文件 这个问题已经不是什么新鲜问题了,网上也有大把的教程,但大多数是授人以鱼,而不授人以渔,经过辛苦的资料收集,思考,调试,整理,我基本上已经把这个问题从原理上搞清楚了,现在根据我自己的理解,在范例程序的基础上,加以解释,希望能对部分网友(比我还菜的:-))有所帮助. 请诸位大虾能对其中的不正或不良这处予以指正. 程序中stream对象的用法上参考了"化境HTTP上传程序 Version 2.0"在代码,在此对稻

ASP文件上传原理分析及实现实例

摘要:在基于/的应用环境中,上传各种类型的文件一直是困扰用户文件管理应用的难题之一.在HTTP中上传文件有三种机制:RFC1867,PUT和WebDAV.常用的实现方法是利用在RFC1867中引入的一个新类型:File以及ADO Stream对象.本文对上述上传方法及实现原理作了论述,并给出了具体解决实例. ASP FILE对象 当前,基于/模式的应用比较流行.当用户需要将文件传输到上时,常用方法之一是运行FTP并将每个用户的FTP默认目录设为用户的Web主目录,这样用户就能运行FTP客户程序并

asp文件上传的速度和上传组件有关吗

问题描述 asp文件上传的速度和上传组件有关吗,我有两个上传文件源代码,一个上传组件是无惧上传组件一个是upload_5xsoft程序运行时前者上传文件90M很快上传了(都是本地上传到本地的),后者10M的都要很慢求解等大虾~~~ 解决方案 解决方案二:有关系有的组件做得很好上传很快解决方案三:由关系吧解决方案四:有关系的,尽量用第三方组件或者.Net上传,纯脚本写的效率不高

原创的ASP文件上传函数库,比动网、amao的都差了很多,不过是学习的好资料

原创的ASP文件上传函数库,比动网.amao的都差了很多,不过是学习的好资料 54powerman 说明:如果你需要file表单的串值,用GetFullName("file")如果需要file表单的文件名,用GetFileName("file")如果需要file表单的扩展名,用GetExtName("file")如果需要普通文本表单的值,用MyRequest("password")如果需要file表单的二进制值,也是用MyRe

asp文件上传组件 Persits.UploadProgress

<!-- 本文章提供了asp文件上传组件 persits.uploadprogress来实时文件上传功能哦. <%@enablesessionstate=false%> <%  response.expires = -1  pid = request("pid")  timeo = request("to")  set uploadprogress = server.createobject("persits.uploadprogr

一段简单 ASP文件上传实例

本教程将告诉你需要建立一个简单的应用程序,使用户能够上传PDF文件到服务器的步骤,删除现有的文件和查看他们的浏览器中的文件.这个例子使用我们自己的dgFileUpload组成部分,你可以下载一个15天的试用版在这里,您可以按照教程和测试自己的服务器完成的应用程序.所有的源代码,随着小Access 2000数据库教程在本教程中使用,可以下载在这里作为一个ZIP档案. 在下载并取消荏苒存档,您的网站根目录下创建(如的'C: inetpub wwwroot的 dgUpload'),并把两个ASP页(新

asp文件上传错误&amp;#039;800a0005&amp;#039;的解决方法

一.治标方法: IE7以上版本其实把文件上传是否发送完整的本地路径做成一个选项,在IE的Internet选项中可以设置.如下图: 1.Internet安全选项: 2.完整路径选项设置: 由于默认是禁用的,所以会出现问题,把它启用就可以解决问题了.但这是治标的方法,如果网页是面向普通用户的,你不可能要求所有用户都来改变这个设置. 二.治本方法: 治本的方法只能靠改程序了.对于图片预览的,目前我还没有很好的方法获取到图片的本地完整路径,所以只能通过判断浏览器的版本,如果是IE7和FireFox3的版

asp文件上传代码

<% Sub UploadFile()  Dim Upload,FilePath,sFilePath,FormName,File,F_FileName  Dim PreviewSetting,DrawInfo,Previewpath,strPreviewPath  Dim PreviewName,F_Viewname,MakePreview  '-- 是否生成缩略图片  MakePreview = True  Previewpath = Newasp.InstallDir & Newasp.