无组件上传怎样控制文件格式?怎样得到文件的后辍名?

jervis82 2003-12-18 05:03:11
dim contentlen
contentlen=request.totalbytes
'接收到的文件的大小

if contentlen>102400 then
response.write "文件太大,超过100k,不允许上传。请返回"
else

dim content
content=request.binaryread(request.totalbytes)
'接收到的文件大小用字节表示


'二进制相互转换
Function getByteString(StringStr)
getByteString=""
For i=1 to Len(StringStr)
char=Mid(StringStr,i,1)
getByteString=getByteString&chrB(AscB(char))
Next
End Function
Function getString(StringBin)
getString =""
For intCount = 1 to LenB(StringBin)
getString = getString & chr(AscB(MidB(StringBin,intCount,1)))
Next
End Function

dim upbeg,upend,lineone,linetwo,linethree,line1,line2,line3
upbeg=1
upend=instrb(upbeg,content,getbytestring(chr(10)))
lineone=midb(content,upbeg,upend-upbeg)
upbeg=upend+1
line1=lenb(lineone)
upend=instrb(upbeg,content,getbytestring(chr(10)))
linetwo=midb(content,upbeg,upend-upbeg)
upbeg=upend+1
line2=lenb(linetwo)
upend=instrb(upbeg,content,getbytestring(chr(13)))
linethree=midb(content,upbeg,upend-upbeg)
line3=lenb(linethree)

'获得文件名
dim pp,checknametemp,checklen,checkname,filename
pp=instrb(1,linetwo,getbytestring(chr(46)))
checknametemp=rightb(linetwo,line2-pp+1)
checklen=instrb(1,checknametemp,getbytestring(chr(34)))
checkname=getstring(leftb(checknametemp,checklen-1))
filename=year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&checkname

'上传文件
dim alllen,upstream,upstreamend,file
alllen=line1+line2+line3+6
set upstream=server.createobject("adodb.stream")
set upstreamend=server.createobject("adodb.stream")
upstream.type=1
upstreamend.type=1
upstream.open
upstreamend.open
upstream.write content
upstream.position=alllen
file=upstream.read(clng(contentlen-alllen-line1-5))
upstreamend.write file
upstreamend.savetofile(server.mappath("uploadimg/"&filename))
path="uploadimg/"&filename
sql="insert into path (url) values ('"&path&"')"
cn.execute(sql)
'目录路径修改
upstream.close
upstreamend.close
set upstream=nothing
set upstreamend=nothing


...全文
49 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
shuanyu 2003-12-20
  • 打赏
  • 举报
回复
如果你学习VB看起来有轻松了
其实跟VB是一样的
你找一个upload_5xsoft.inc
放在目录里
然后包含它
<!--#include virtual="upload_5xsoft.inc"-->
再建立upload对象
得到传过来的filetitle
filetitle=trim(upload.form("txtTitle"))
trim 去掉前后空格
file.SaveAs Server.mappath(newpath)
保存文件到 Server.mappath(newpath)

对了少贴了点,对不起了
以下是删除对象
得到文件的扩展名

sub HtmEnd(Msg)
set upload=nothing
end sub
'得到文件的扩展名
function GetExtendName(FileName)
dim ExtName
ExtName = LCase(FileName)
ExtName = right(ExtName,3)
ExtName = right(ExtName,3-Instr(ExtName,"."))
GetExtendName = ExtName
end function
%>
shuanyu 2003-12-20
  • 打赏
  • 举报
回复
set upload=new upload_5xSoft
对啊
用upload 指向upload_5xsoft
这个对象
对象赋值要用set 嘛
shuanyu 2003-12-20
  • 打赏
  • 举报
回复
filetitle就是文件的标题
jervis82 2003-12-19
  • 打赏
  • 举报
回复
filetitle=trim(upload.form("txtTitle"))

这个的作用又是什么?
jervis82 2003-12-19
  • 打赏
  • 举报
回复
set upload=new upload_5xSoft

说说这段好吗?
new的作用?
upload_5xSoft是对象名吧.
jervis82 2003-12-19
  • 打赏
  • 举报
回复
大哥可以给个详细一点的注释吧,小弟新手.
lonelydreamsym 2003-12-19
  • 打赏
  • 举报
回复
Have a look:
http://efun.student.hvttc.edu.cn/efun/list.asp?id=13
shuanyu 2003-12-19
  • 打赏
  • 举报
回复
以上程序在iis上测试通过
使用时可将数据库部份去掉
shuanyu 2003-12-19
  • 打赏
  • 举报
回复
<!--#include virtual="upload_5xsoft.inc"-->
<!--#include virtual="Connections/cnna.asp" -->
<%
'设定可上传文件大小
minsize=1000
maxsize=180000
response.write("文件大小在" & minsize & "和" & maxsize & "之间!" & "<br>")
fixextend="txt.jpg.gif" '设定可上传文件的扩展名
'把时间转化为文件名
function makefilename()
fname = now()
fname = replace(fname,"-","")
fname = replace(fname," ","")
fname = replace(fname,":","")
fname = replace(fname,"PM","")
fname = replace(fname,"AM","")
fname = replace(fname,"上午","")
fname = replace(fname,"下午","")
makefilename=fname
end function
'上传文件
dim upload,file,formName,formPath,iCount
set upload=new upload_5xSoft ''建立上传对象
filetitle=trim(upload.form("txtTitle"))
if filetitle="" then
filetitle="无标题"
end if
'response.write upload.Version&"<br><br>" ''显示上传类的版本
set file=upload.file("file")
filesize=file.filesize
response.Write "文件大小为:" & file.filesize & "<br>"
'如果没为文件名
if file.filename="" then
endupload()
end if
if filesize<minsize or filesize > maxsize then
endupload()
end if
response.Write "上传的标题为:" & filetitle & "<br>"
response.Write "上传的文件名为:" & file.filename & "<br>"
'得到新的文件名和文件路径
newfilename=makefilename() & "." & GetExtendName(file.FileName)
newpath="picturebox\" & newfilename
response.write(newfilename)
'是否是可上传的文件
if instr(fixextend,GetExtendName(file.FileName)) then
file.SaveAs Server.mappath(newpath)
strSql="select * from t_pic"
set rs=server.createobject("adodb.recordset")
rs.open trim(strSql),conn,3,2
rs.addnew
rs.fields("userid")=session("userid")
rs.fields("pictitle")=filetitle
rs.fields("picsize")=filesize
rs.fields("picpath")=newpath
rs.fields("picdate")=now()
rs.update
rs.close
set rs=nothing
response.write("<div align='center'>文件上传成功!</div><br>")
response.write("<div align='center'><a href='uploadpic.asp'>返回</a></div>")
else
endupload()
end if

sub endupload()
response.write("<div align='center'>文件上传失败!</div><br>")
response.write("<div align='center'><a href='uploadpic.asp'>返回</a></div>")
response.end
end sub


%>
jervis82 2003-12-19
  • 打赏
  • 举报
回复
为什么我用上面的代码上传的时候那些后辍名会出问题?
有些jpg文件可以上传,有些上传后后辍会变成 .j
gif图片也有这个问题,后辍的话同样会变成 .j
高手请指教
robinsonyjf 2003-12-18
  • 打赏
  • 举报
回复
先取出文件名称,从后面取出三位就行了
nchen123 2003-12-18
  • 打赏
  • 举报
回复
right(filename, 4) 来判断, 因为一般扩展名都是 3 位
如:

if right(lcase(filename), 4) <> ".jpg" then
response.write "只能上传 jpg 图片"
response.end
end if

28,407

社区成员

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

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