多个表单和多个图片一起上传完美解决方案

2016-01-29 17:44 336 1 收藏

多个表单和多个图片一起上传完美解决方案,多个表单和多个图片一起上传完美解决方案

【 tulaoshi.com - ASP 】

  upload.inc
<!---------------------
<SCRIPT RUNAT=SERVER LANGUAGE=VBSCRIPT
Function GetUpload(FormData)
Dim DataStart,DivStr,DivLen,DataSize,FormFieldData
''分隔标志串(+CRLF)
DivStr = LeftB(FormData,InStrB(FormData,str2bin(VbCrLf)) + 1)
''分隔标志串长度
DivLen = LenB(DivStr)
PosOpenBoundary = InStrB(FormData,DivStr)
PosCloseBoundary = InStrB(PosOpenBoundary + 1,FormData,DivStr)
Set Fields = CreateObject("Scripting.Dictionary")

While PosOpenBoundary 0 And PosCloseBoundary 0
''name起始位置(name="xxxxx"),加6是因为[name="]长度为6
FieldNameStart = InStrB(PosOpenBoundary,FormData,str2bin("name=")) + 6
FieldNameSize = InStrB(FieldNameStart,FormData,ChrB(34)) - FieldNameStart ''(")的ASC值=34
FormFieldName = bin2str(MidB(FormData,FieldNameStart,FieldNameSize))

''filename起始位置(filename="xxxxx")
FieldFileNameStart = InStrB(PosOpenBoundary,FormData,str2bin("filename=")) + 10
If FieldFileNameStart < PosCloseBoundary And FieldFileNameStart PosopenBoundary Then
FieldFileNameSize = InStrB(FieldFileNameStart,FormData,ChrB(34)) - FieldFileNameStart ''(")的ASC值=34
FormFileName = bin2str(MidB(FormData,FieldFileNameStart,FieldFileNameSize))
Else
FormFileName = ""
End If

''Content-Type起始位置(Content-Type: xxxxx)
FieldFileCTStart = InStrB(PosOpenBoundary,FormData,str2bin("Content-Type:")) + 14
If FieldFileCTStart < PosCloseBoundary And FieldFileCTStart PosOpenBoundary Then
FieldFileCTSize = InStrB(FieldFileCTStart,FormData,str2bin(VbCrLf & VbCrLf)) - FieldFileCTStart
FormFileCT = bin2str(MidB(FormData,FieldFileCTStart,FieldFileCTSize))
Else
FormFileCT = ""
End If

''数据起始位置:2个CRLF开始
DataStart = InStrB(PosOpenBoundary,FormData,str2bin(VbCrLf & VbCrLf)) + 4
If FormFileName < "" Then
''数据长度,减1是因为数据文件的存取字节数问题(可能是AppendChunk方法的问题):
''由于字节数为奇数的图象存到数据库时会去掉最后一个字符导致图象不能正确显示,
''字节数为偶数的数据文件就不会出现这个问题,因此必须保持字节数为偶数。
DataSize = InStrB(DataStart,FormData,DivStr) - DataStart - 1
FormFieldData = MidB(FormData,DataStart,DataSize)
Else
''数据长度,减2是因为分隔标志串前有一个CRLF
DataSize = InStrB(DataStart,FormData,DivStr) - DataStart - 2
FormFieldData = bin2str(MidB(FormData,DataStart,DataSize))
End If

''建立一个Dictionary集存储Form中各个Field的相关数据
Set Field = CreateUploadField()
Field.Name = FormFieldName
Field.FilePath = FormFileName
Field.FileName = GetFileName(FormFileName)
Field.ContentType = FormFileCT
Field.Length = LenB(FormFieldData)
Field.Value = FormFieldData

Fields.Add FormFieldName, Field

PosOpenBoundary = PosCloseBoundary
PosCloseBoundary = InStrB(PosOpenBoundary + 1,FormData,DivStr)
Wend
Set GetUpload = Fields
End Function

''把二进制字符串转换成普通字符串函数
Function bin2str(binstr)
Dim varlen,clow,ccc,skipflag
''中文字符Skip标志
skipflag=0
ccc = ""
If Not IsNull(binstr) Then
varlen=LenB(binstr)
For i=1 To varlen
If skipflag=0 Then
clow = MidB(binstr,i,1)
''判断是否中文的字符
If AscB(clow) 127 Then
''AscW会把二进制的中文双字节字符高位和低位反转,所以要先把中文的高低位反转
ccc =ccc & Chr(AscW(MidB(binstr,i+1,1) & clow))
skipflag=1
Else
ccc = ccc & Chr(AscB(clow))
End If
Else
skipflag=0
End If
Next
End If
bin2str = ccc
End Function


''把普通字符串转成二进制字符串函数
Function str2bin(varstr)
str2bin=""
For i=1 To Len(varstr)
varchar=mid(varstr,i,1)
varasc = Asc(varchar)
'' asc对中文字符求出来的值可能为负数,
'' 加上65536就可求出它的无符号数值
'' -1在机器内是用补码表示的0xffff,
'' 其无符号值为65535,65535=-1+65536
'' 其他负数依次类推。
If varasc<0 Then
varasc = varasc + 65535
End If
''对中文的处

来源:http://www.tulaoshi.com/n/20160129/1502747.html

延伸阅读
标签: 办公软件
    一般情况下,我们使用Word 2000编辑、打印文稿时,其行数、行字数都采用Word默认设定。但也有例外的,某校对毕业论文的排版打印做了明确的规定,要求在16开纸打印,使用三号字,每页25行,每行30字。如果通过改变“字符间距”等方法来实现,既麻烦也不科学(往往每行字数总有误差)。经过摸索,我找到了“完美”方法。 ...
      做web开发大家都遇到过打印的问题,对于复杂的表格打印着实令人头痛,这片文章介绍一下使用excel打印的解决方法。     首先,如果客户端调用excel必须降低ie安全级别,这样一些非法的控件,如3721什么的都自动安装了,所以我这样解决:保持原来的ie设置,把你的站点添加到信任站点,然后更改安全站...
标签: ASP
  出处:宝玉BLOG 一、无组件上传的原理 我还是一点一点用一个实例来说明的吧,客户端HTML如下。要浏览上传附件,我们通过<input type="file"元素,但是一定要注意必须设置form的enctype属性为"multipart/form-data": <form method="post" action="upload.asp" enctype="multipart/form-data"  <label   <inpu...
标签: word
Word怎么一次加入多个图片   在Word中插入一张图片对于一般人来说都不是难事,但是同时插入多张的图片的话,相信很多的朋友就开始懵了吧。没关系,不懂的话,就和图老师小编一起来学习一下吧! Word 其实一次插入多个图片非常简单,下面就一起来看看如何插入多个图片吧! ①打开Word文档,依次打开菜单栏上的插入--》...
标签: 电脑入门
WMV转3GP,可实现将微软的流媒体WMV格式转换成手机常用的3GP格式,WMV格式的视频体积非常小,画质清晰,因此很适合在网上播放和传输,由于从网上下载到的WMV电影、电视剧都是不能放到手机直接播放的,所以我们就需要用到专业的WMV转3GP格式转换器 - 《MP4/RM转换专家》,将WMV视频,甚至VC-1高清编码的WMV9转换成3GP以在手机流畅播放。《MP4/...

经验教程

701

收藏

64
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部