收藏本站 收藏本站
积木网首页 - 软件测试 - 常用手册 - 站长工具 - 技术社区
积木学院 > 程序开发 > ASP > 正文

ASP 无组件上传

来源:互联摘选 日期:2006-01-01 06:56

ASP 无组件上传

 

说明:从网上收集了一部分,自己写了一部分。主要提升就是对于form的二进制数据进行了类封装,可以容易的得到form内的元素的信息。

 

Form 二进制数据格式:

 

分割标志数据 + 0x0D0A

元素说明信息 + 0x0D0A0D0A

元素内容数据 + 0x0D0A

分割标志数据 + 0x0D0A

元素说明信息 + 0x0D0A0D0A

元素内容数据 + 0x0D0A

……

分割标志数据 + 0x0D0A

 

 

1.  Upload.htm

 

;html;

;head;;title;文件上传;/title;;/head;

;body;

;form enctype="multipart/form-data" action="upload.asp" method="post";

  ;input name="text0" type=text value="文本框";;br; 

  ;input name="file1" type=file accept="image/*";;br;

  ;input name="file2" type=file accept="image/*";;br;

  ;input type=submit value="上传";

;/form;

;/body;

;/html;

 

2.  upload.asp

;!--#include file="upload.inc"--;

;%

'by sam 2004,6

'###############################################################################

response.expires = 0

 

if request.servervariables("REQUEST_METHOD")="POST" then

response.clear()

response.buffer=true

 

set uform = new uploadform

uform.find_element "text0"

 

data = midb(uform.formdata,uform.datastart,uform.datalen)

Response.binaryWrite data

sdata = binarytostring(data)

Response.write sdata

Response.binarywrite stringtobinary(sdata)

 

 

 

 

uform.find_element "file1"

savefile  server.mappath("/recv1.dat"),uform.formdata,uform.datastart,uform.datalen

 

uform.find_element "file2"

savefile  server.mappath("/recv2.dat"),uform.formdata,uform.datastart,uform.datalen

 

 

set uform = nothing

 

end if

%;

 

3. upload.inc

;%

'by sam  2004,6

'#################################################################

function savefile(filename,formdata,start,len)

 

set strm1=server.createobject("adodb.stream")

set strm2=server.createobject("adodb.stream")

strm1.open

strm1.type=1 'binary

strm2.open

strm2.type=1 'binary

strm1.write formdata

'strm1.savetofile server.mappath("/1.raw"),2

strm1.position = start - 1

strm1.copyto strm2,len

'strm2.savetofile server.mappath("/1.gif"),2

strm2.savetofile filename,2

set strm1=nothing

set strm2=nothing

 

end function

 

 

function simplebinarytostring(binary)

  dim i, s

  for i = 1 to lenb(binary)

  s = s & chr(ascb(midb(binary,i,1)))

  next

  simplebinarytostring = s

end function

 

function binarytostring(binary)

  dim cl1,cl2,cl3,pl1,pl2,pl3

  dim l

  cl1 = 1

  cl2 = 1

  cl3 = 1

  l = lenb(binary)

 

  do while cl1;=l

  pl3 = pl3 & chr(ascb(midb(binary,cl1,1)))

  cl1 = cl1 + 1

  cl3 = cl3 + 1

  if cl3;300 then

 pl2 = pl2 & pl3

  pl3 = ""

  cl3 = 1

  cl2 = cl2 + 1

  if cl2;200 then

  pl1 = pl1 & pl2

  pl2 = ""

  cl2 = 1

  end if

  end if

  loop

  binarytostring = pl1 & pl2 & pl3

end function

 

 

function stringtobinary(string)

dim i, b

for i=1 to len(string)

b = b & chrb(asc(mid(string,i,1)))

next

stringtobinary = b

end function

 

 

 

 

class uploadform

private sub class_initialize()

  datastart = 0

  datalen = 0 

  formsize=request.totalbytes

  formdata=request.binaryread(formsize)

  'response.write ";br;myclass start;br;"

end sub

private sub class_terminate()

  'response.write ";br;myclass over;br;"

end sub

  public datastart

  public datalen

 

  public formsize

  public formdata

   

public sub find_element( name)

datastart = 0

datalen = 0

bncrlf=chrb(13) & chrb(10)

strname = "name=" & chr(34) & name & chr(34)

spos = 1

epos = 1

k = 0

do while ( spos ; formsize)

epos = instrb(spos,formdata,bncrlf)

divider = midb(formdata,spos, epos - spos)

sdivider = binarytostring (divider)

'response.write sdivider & ";br;"

'response.binarywrite divider & ";br;"

spos = epos + 2

epos = instrb(spos,formdata,bncrlf & bncrlf)

header = midb(formdata,spos,epos - spos)

sheader = binarytostring (header)

'response.write sheader & ";br;"

'response.binarywrite header & ";br;"

spos = epos + 4

epos = instrb(spos,formdata,divider)

if instr(sheader,strname) ; 0  then

  datastart = spos  'base 1

  datalen = epos - spos - 2

 

  'response.write "start = " & datastart & ";br;"

  'response.write "  end = " & datalen & ";br;"

  'savefile server.mappath("/output.dat"),formdata, datastart,datalen

  exit do

 

end if

spos = epos

k = k + 1

if ( k ; 20 ) then

    exit do

end if 

loop

end sub

 end class

 

%;

 

 

Sam Sha

Sam_sha@sina.com.cn

2004-6-7

 

推荐阅读

 

热点信息

 
强悍的草根IT技术社区,这里应该有您想要的! 友情链接:b2b电子商务
Copyright © 2010 Gimoo.Net. All Rights Rreserved  京ICP备05050695号