急学,高分求asp无组件上传注释(丁书记的)

lovefan666 2005-05-31 05:20:33
想学上传,但连代码都看不懂,请高手给个注释,我好学习。
<%
''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
%>
...全文
254 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
syd41 2005-07-20
  • 打赏
  • 举报
回复
关注!
chloe 2005-07-19
  • 打赏
  • 举报
回复
顶!
lovefan666 2005-06-20
  • 打赏
  • 举报
回复
再没人回,就结了,顶的都给分
lovefan666 2005-06-10
  • 打赏
  • 举报
回复
学习的请帮忙UP一下,我看不懂那些函数
ahcs 2005-06-09
  • 打赏
  • 举报
回复
up
charkie 2005-06-09
  • 打赏
  • 举报
回复
又有人换个马甲来发广告
lovefan666 2005-06-09
  • 打赏
  • 举报
回复
大家帮忙顶啊,都这么多天了
lovefan666 2005-06-05
  • 打赏
  • 举报
回复
自己先注释一个函数吧,和大家共同学习,希望高手帮忙注释其他的,希望和我一样学习的也大胆的把自己的注释发出来,谢谢

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 ' 打开流对xiang
BytesStream.WriteText vin '把vin写入流对象中
BytesStream.Position = 0 '设置流对象的起始位置是0,也就是开tou
BytesStream.Charset = "gb2312"'设置流对象的编码方式为GB2312
BytesStream.Position = 2 '设置流对象的起始位置是2
StringReturn = BytesStream.ReadText'把流对象的内容保存在StringReturn变量中 因为BytesStream.WriteText vin读入数据的时候自动加到数据开头的两位控制字符,所以要过滤掉
BytesStream.close'关闭流对象
Set BytesStream = Nothing'销毁流对象
Bytes2bStr = StringReturn
End Function
lovefan666 2005-06-05
  • 打赏
  • 举报
回复
谢谢回复,可我不知道的,希望知道,我不知道为什么要这么写啊。
hzbigdog 2005-06-05
  • 打赏
  • 举报
回复
这个是2进制的位操作,他将客户上传的数据库用2进制的方式读取出来,然后将变量与文件的上传数据分离,最后再将文件数据解码,形成文件流信息保存。

中间的过程不用理会,你没有必要知道,即使知道也没有意义!位操作是低级操作,你连IE再访问网络的时候到底给服务器发送了那些数据也不知道,是没有办法理解如何拆解2进制数据流的。
zhanghongwen 2005-06-05
  • 打赏
  • 举报
回复
呵呵,帮你顶
lovefan666 2005-06-04
  • 打赏
  • 举报
回复
up
lovefan666 2005-06-03
  • 打赏
  • 举报
回复
up
lovefan666 2005-06-02
  • 打赏
  • 举报
回复
5555UP
asp1110 2005-06-02
  • 打赏
  • 举报
回复
100MB asp和 asp.net空间 50/1年
我看到了一个网站 100MB asp和 asp.net空间 现在促销,
同学们可以做一个简单的个人网站用来找工作 ,
支持 asp.net 一年才50元!不要错过哦!!!
速度非常快,一般公司企业 足够用了!
http://www.hi876.com
希望能对大家有帮助
lovefan666 2005-06-02
  • 打赏
  • 举报
回复
无人问津吗
lovefan666 2005-06-01
  • 打赏
  • 举报
回复
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

loopcnt fldHead fldInfo(i,0)通通搞不懂啊
jackycxg 2005-06-01
  • 打赏
  • 举报
回复
UP。。。
jackycxg 2005-06-01
  • 打赏
  • 举报
回复
我也看不懂这种代码,不过有时候就是直接用,不知道个所以然,呵呵

帮你顶起来吧
iuhxq 2005-06-01
  • 打赏
  • 举报
回复
up
加载更多回复(2)

28,406

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧