急学,高分求asp无组件上传注释(丁书记的)
想学上传,但连代码都看不懂,请高手给个注释,我好学习。
<%
''Option Explicit
Server.ScriptTimeout = 999 '要上传较大的文件就要开启此项
Dim myconn,connstr
connstr = "Provider=Microsoft.Jet.Oledb.4.0;data source="&Server.MapPath("Upload.mdb")
set myconn = Server.CreateObject("adodb.connection")
myconn.open connstr
Dim OKAr
Dim OKsize
Set rs = myconn.execute("select * from Config")
'***************设置允许上传的文件类型********************
OKAr = split(rs(0),",")
'***********************************
'***************设置允许上传的文件大小********************
OKsize = Clng(rs(1))
'***********************************
Function Bytes2bStr(vin)
if lenb(vin) =0 then
Bytes2bStr = ""
exit function
end if
''二进制转换为字符串
Dim BytesStream,StringReturn
Set BytesStream = Server.CreateObject("ADODB.Stream")
BytesStream.Type = 2
BytesStream.Open
BytesStream.WriteText vin
BytesStream.Position = 0
BytesStream.Charset = "gb2312"
BytesStream.Position = 2
StringReturn = BytesStream.ReadText
BytesStream.close
Set BytesStream = Nothing
Bytes2bStr = StringReturn
End Function
-------------------------------------------------下面的看不懂,请大家给个注释,谢谢
Function Myrequest(fldname)
''取表单数据
''支持对同名表单域的读取
dim i
dim fldHead
dim tmpvalue
for i = 0 to loopcnt-1
fldHead = fldInfo(i,0)
if instr(lcase(fldHead),lcase(fldname))>0 then'转化为小写并判断fldname在fldhead 中第一次出现的位置
''表单在数组中
''判断该表单域内容
tmpvalue = FldInfo(i,1)
if instr(fldHead,"filename=""")<1 then
Tmpvalue = Bytes2bStr(tmpvalue)
if myrequest <> "" then
myrequest = myrequest & "," &tmpvalue
else
MyRequest = tmpvalue
end if
else
myrequest = tmpvalue
end if
end if
next
end function
function GetFileName(fldName)
''都取原上传文件文件名
dim i
dim fldHead
dim fnpos
for i = 0 to loopcnt-1
fldHead = lcase(fldInfo(i,0))
if instr(fldHead,lcase(fldName)) > 0 then
fnpos = instr(fldHead,"filename=""")
if fnpos < 1 then exit for
fldHead = mid(fldHead,fnpos+10)
''表单内容
GetFileName = mid(fldHead,1,instr(fldHead,"""")-1)
GetfileName = mid(GetFileName,instrRev(GetFileName,"\")+1)
end if
next
end function
function GetContentType(fldName)
''读取上传文件的类型
''限定读取文件域的内容
dim i
dim fldHead,cpos
for i = 0 to loopcnt - 1
fldHead = lcase(fldInfo(i,0))
if instr(fldHead,lcase(fldName)) > 0 and instr(fldHead,"filename=""") >0 then
''读取contentType
cpos = instr(fldHead,"content-type: ")
GetContentType = mid(fldHead,cpos+14)
end if
next
end function
Sub SaveToFile(fd,path,fname)
''保存文件''参数说明:''fd:byte()类型数据,文件内容''path:保存路径后面必须带"/"''fname:文件名
dim Fstream
Set FStream = Server.CreateObject("adodb.stream")
fstream.mode = 3
fstream.type = 1
fstream.open
fstream.position = 0
fstream.Write fd
fstream.savetofile Server.Mappath(path&fname),2
fstream.close
set fstream = nothing
end sub
Function GetFileTypeName(Fldname)
If instr(Fldname,".") > 0 Then
GetFileTypeName = right(Fldname,3)
Else
Response.Write "文件名非法,请修改后再上传"
Response.End()
End If
End Function
Function IsvalidFile(TypeName) '限制上传文件类型
IsvalidFile = False
Dim GName
For Each GName in OKAr
If TypeName = GName Then
IsvalidFile = True
Exit For
End If
Next
End Function
Sub CheckLogin()
If Session("Admin") <> "OK" Then
Logined = False
Response.Write ("未通过身份验证,请<a href=Index.asp>返回</a>")
Response.Redirect ("Index.asp")
Response.End()
End If
End Sub
%>
还有下面这个文件里的也看不懂,大家帮忙注释一下,谢谢大哥们了,急
<!--#include file="Config.asp"-->
<%
''主程序开始部分
dim formsize,formdata,Msg
formsize = Request.TotalBytes
formdata = Request.BinaryRead(formsize)
UploadSize=True
If formsize = 0 or Formsize > OKsize Then
UploadSize=False
Response.Write"你要上传的文件大小超出程序限制,请<a href=index.asp>返回</a>修改重试"
Response.End
End If
dim sinfo_Stream
Set Sinfo_Stream = Server.CreateObject("adodb.stream")
Sinfo_Stream.Type = 1 ''2进制流
Sinfo_Stream.Mode = 3 ''读写模式
Sinfo_Stream.Open
Sinfo_Stream.Write formdata ''保存二进制内容到流对象
''分离数据变量
dim VbEnter
dim spStr,lenOfspStr,bpos
dim loopcnt,exitflag,ppoint,npoint
''保存数据变量
dim FldData,fldHeadStr,infldpos
dim databpos,datalen
dim FldInfo(15,1)
''fldInfo(0)表单头内容
''fldInfo(1)表单数据
VbEnter = chrb(13)&chrb(10)''读取第一个VbEnter位置
bpos = Instrb(formdata,VbEnter)
SpStr = midb(formdata,1,bpos+1) ''包含了一个0d0a
LenOfspStr = lenb(Spstr)
ppoint = LenOfspStr+1 ''位置指针,指向每一个表单域内容的开始位置
formdata = midb(formdata,ppoint)
loopcnt = 0 ''表单元素
do
bpos = instrb(formdata,spStr) ''分割位置
npoint = (ppoint+bpos+lenofspstr-1) ''指向下一表单开始位置
if bpos < 1 then
fldData = midb(formdata,1,instrb(formdata,leftb(spStr,lenOfspstr-2))-1)
bpos = lenb(fldData)+1
exitflag = true
else
FldData = leftb(formdata,bpos-1)
formdata = midb(formdata,bpos+LenOfspstr)
end if
infldpos = instrb(fldData,vbEnter&vbEnter)
fldHeadStr = bytes2bstr(midb(fldData,1,infldpos-1))
fldInfo(loopcnt,0) = fldHeadStr ''表单头
''Response.Write fldHeadStr&"<br>"
databpos = (ppoint+infldpos-1+4)
Sinfo_Stream.Position = databpos-1
datalen = (bpos-infldpos-6)
if datalen = 0 then
fldInfo(loopcnt,1) = ""
else
fldInfo(loopcnt,1) = Sinfo_Stream.Read(datalen)
end if
ppoint = npoint
loopcnt = loopcnt + 1
loop until exitflag = true
Sinfo_Stream.close
Set Sinfo_Stream = Nothing
''以上程序数据处理过程
''写入数据库并处理文件上传开始
Sub SaveData()
ftitle = MyRequest("filetitle")
Msg = ""
if ftitle = "" then
Msg = Msg & "文件名称:空<br>"
else
Msg = Msg & "文件名称:"&ftitle&"<br>"
end if
ftype = myrequest("fileType")
Msg = Msg & "文件类型:"&ftype&"<br>"
filedata = myrequest("filedata")
filesize = lenb(filedata)
if filesize = 0 then
Msg = Msg & "上传文件:没有<br>"
else
filename = GetFileName("filedata")
''限制加入的类型 *.asp
file_ctype = GetContentType("filedata")
Msg = Msg & "上传文件:"&filename&" "
Msg = Msg & "数据流:"&file_ctype&" "
Msg = Msg & "文件长度:"&filesize&"<br>"
end if
filedesc = myrequest("fileDesc")
Msg = Msg & "文件说明:"&filedesc&"<br><br>"
FileTypeName = GetFileTypeName(FileName)
If IsvalidFile(FileTypeName)=False Then
Msg = "文件类型非法,不允许上传"&FileTypeName&"文件!"
Exit Sub
End If
if ftitle<>"" and fileSize > 0 and UploadSize=True then
''保存数据到数据库
dim basepath,sql
basepath = "./uploadfile/"
sql = "insert into info (filetitle,filedesc,filetype,filecontenttype,filepath,filesize) values ('"
sql = sql & ftitle &"','"&filedesc&"','"&ftype&"','"&file_ctype&"','"&basepath&filename&"',"&filesize&")"
myconn.Execute(sql)
Call SavetoFile(filedata,basepath,filename)
Msg = Msg & "文件已经上传<br>"
else
Msg = Msg & "上传失败! "&ErrorMsg&"<br>"
end if
myconn.close()
set myconn = nothing
End Sub
''文件上传已经写入数据完毕,提示信息出口为变量msg
SaveData
%>