- 热门文章:
- · 这个问题我刚刚前两天做过,呵呵(会不会加入精华区)
- · 关于生成目录树结构的类
- · 利用ADODB.Stream使用浏览器下载服务器文件
- · fso的一些特殊功能,不知大家有没有试过
- · asp实现k线图(在线)
- · 用文本+ASP打造新闻发布系统(二)新闻添加
- · 用文本+ASP打造新闻发布系统(三)新闻列表显示
- · 用文本+ASP打造新闻发布系统(四)新闻删除/新闻删除
- · 用文本+ASP打造新闻发布系统(五)新闻修改
- · 用文本+ASP打造新闻发布系统/图片上传(不是我写的)upload.inc
- · 用文本+ASP打造新闻发布系统。几点补充
- · 转帖一个ASP作的剪包锤游戏
上一篇:用自定义函数获取汉字的首字母(希望进精华区) >>
多个表单和多个图片一起上传完美解决方案
<!--------------------->
<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
‘’‘’对中文的处理:把双字节低位和高位分开
If varasc>255 Then
varlow = Left(Hex(Asc(varchar)),2)
varhigh = right(Hex(Asc(varchar)),2)
str2bin = str2bin & chrB("&H" & varlow) & chrB("&H" & varhigh)
Else
str2bin = str2bin & chrB(AscB(varchar))
End If
Next
End Function
‘’‘’取得文件名(去掉Path)
Function GetFileName(FullPath)
If FullPath <> "" Then
FullPath = StrReverse(FullPath)
FullPath = Left(FullPath, InStr(1, FullPath, "\") - 1)
GetFileName = StrReverse(FullPath)
Else
GetFileName = ""
End If
End Function
</SCRIPT>
<SCRIPT RUNAT=SERVER LANGUAGE=JSCRIPT>
function CreateUploadField(){ return new uf_Init() }
function uf_Init(){
this.Name = null
this.FileName = null
this.FilePath = null
this.ContentType = null
this.Value = null
this.Length = null
}
</SCRIPT>
<!---------------------------------------------------->
在提交的叶面使用
<form method="POST" enctype="multipart/form-data">
保存的叶面
将upload.inc包含
<!--#include file="upload.inc"-->
<%
function lngConvert2(strTemp)
str1=leftb(strTemp,1)
str2=rightb(strTemp,1)
lngConvert2 = clng(ascb(str2) + ((ascb(str1) * 256)))
end function
function lngConvert(strTemp)
str1=leftb(strTemp,1)
str2=rightb(strTemp,1)
len1=ascb(str1)
len2=ascb(str2)
lngConvert = clng(ascb(str1) + ascb(str2) * 256)
end function
Dim FormData,FormSize
FormSize=Request.TotalBytes
FormData=Request.BinaryRead(FormSize)
Set Fields = GetUpload(FormData)
If Fields("newfile").FileName<>"" Then
tempstr=Leftb(Fields("newfile").Value,10)
tstr=chrb(255)&chrb(216)&chrb(255)&chrb(224)&chrb(0)&chrb(16)&chrb(74)&chrb(70)&chrb(73)&chrb(70)
end if
‘’提交页面的表单内容
txt1=Fields("txt1").Value
txt2=Fields("txt2").Value
txt3=Fields("txt3").Value
Set rs = Server.CreateObject("ADODB.Recordset")
sql="select * from news"
rs.open sql,conn,1,3
‘’插入纪录
rs.addnew
rs("title")=title
rs("body")=content
rs("pub")=from
rs("up_date")=now()
set field=rs.fields("pic")
field.appendchunk Fields("newfile").Value
‘’多个图片一样处理
Rs.Update
rs.close
conn.close
set rs=nothing
set conn=nothing
%>
下一篇:这个问题我刚刚前两天做过,呵呵(会不会加入精华区) >>
相关文章:
- · 产生随机密码的函数
- · 这里!!
- · 在Web界面下如何生成像资源管理器一样的树形目录(版本2.0) eeff(原作) [精]
- · 把这个组成文件就行了!,建议斑竹加精华!关键字:使用FSO按文件大小浏览文件目录并进行删除操作
- · 利用 WSH 作定时工作流程
- · 给你一个全的.
- · 用InstallShield 进行 ASP 软件的打包和自动安装(Jaron原创)
- · 不知道大家使用没使用我前几天写的操作INI文件的COM呢?我把代码贴出来。
- · 服务器获得客户端时间的方法
- · 关于如何读出图片的高度与长度的总结
- · 看到有人问如何取中文为2的指定字符串字节数,研究一下:
- · 一个不错的随机函数。
- · 使用asp实现支持附件的邮件系统(一)
- · 使用asp实现支持附件的邮件系统(三)
- · 我用JS+Cookie编写的购物车,(添加、修改过程在客户端执行,一次提交服务器,IE适用),请大家指正(一)
- · 使用asp实现支持附件的邮件系统(二)
- · 我用JS+Cookie编写的购物车,(添加、修改过程在客户端执行,一次提交服务器,IE适用),请大家指正(二)
- · 我用JS+Cookie编写的购物车,(添加、修改过程在客户端执行,一次提交服务器,IE适用),请大家指正(三)
- · 网络寻呼机数据库版发送消息tomessage.asp
- · 网络寻呼机数据库版处理发送消息SubmitMessage.asp
- · 网络寻呼机数据库版显示消息showmessage.asp
- · 网络寻呼机数据库版显示历史消息history.asp
- · 网络寻呼机数据库版删除选中的消息deletemessage.asp
- · 网络寻呼机数据库版隐藏文件watch.asp
- · 网络寻呼机数据库版总结
- · 一个例子:从新浪提取上海天气的vbs
- · 购物车范例(转)(处理页面)
- · 购物车范例(转)(购物车页面 )
- · 附:源代码4:BBSLOGIN.ASP
- · 附:源代码5:BBSLOGIN.HTM
- · BBSCHECKOUT.ASP
- · BLOBAL.ASA
- · 附:原文
- · 附:源代码2:BBSAUTOSEARCH.ASP
- · 附:源代码1:BBSSENDBEGIN.ASP
- · 附:源代码3:BBSSENDINFO.ASP
- · 试用网络传呼机
- · 用ASP实现网上“五子连珠”大赛 (转贴)
