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

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


...全文
54 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
以下是原压缩包内的说明: ------------------------------------------- 写在前面的话: 最近一直在做站点,所以常用到ewebeditor,可是最近这几天在研究6.2的过程时发现我们被狠狠的忽悠了一把, 从4.8到5.2,我个人认为全是ewebeditor的炒做放出的东西,由其是5.2我发现决对是官方放出的东西,很晕, 没想到自己被别人利用了,也罢,怎么着也在用别人的东西!6.2版现在加上了验证,并且,ewebeditor现在把 整体代码做了很大的改动,改动起来很麻烦,本人也很菜,所以本人决定从这版后将不研究ewebeditor。 以下是本次更新内容 原程序:网上所谓的5.5商业版(屁!!!!) 2009年5月22日更新: 先说明一下,本次调整后你的编辑器必需放到站点的子目录下,因为后台设置上传路径时相对于uploadfile.asp 的上层,怕有先人不明白,我作个例: 如:我的编辑器主目录是主站下的editor目录,我在后台设置上传目录时与editor目录同级。也就是在主目录下 1、补齐所有语言包,后台可选语言包。 2、调整了一下文件结构,使结构更清晰。 3、自行编写了include/style.asp来读取样式设置及工具栏从而不用生成js文件了!本来5.2时候我后来也是这样 做的,6.2发现官方也是这样,所以就也参照了一下! 4、调整主文件即ewebeditor.htm不能改的问题,后来发现原来可以改,只是会导致编辑器目录出错,而导致找不到样式。 注意:主文件必需是.asp,因为主文件内这我做了一下判断编辑器的目录操作。如果怕别人得知道,你也可以这样, 把主文件改为Easy.Editor.Asp,然后在你的服务器IIS默认文档内加文档为Easy.Editor.Asp 例:如我的编辑器在Editor目录下,其它文件调时/Editor?id=content1&style=standard650&skin=office2003 5、修改原文件不会自动创建主目录问题,现在你可以在不超出本站范围内任意地方建主上传目录了。 6、当后台设置上传目录为../../../../../等等时,可以会导致上传超出本站,那就麻烦了,所以这版你不用担心了,你在 多也只能是主目录下。 7、同5.2一样,本次uploadfile.asp增加了完全禁止上传文件后辍,在uploadfile.asp顶部设置!但本次修改是不会弹出 “当前文件类型被本站完全禁用”的话语,而是我直接将被更改的后台设置图片后辍替换掉,直接“弹出类型不正确”。 因为除非他改后台的上传文件类型,不然如asp类文件上传不上去,所以在初始上传时就进行类型过滤! 8、同5.2一样,本次uploadfile.asp增加了上传文件内容检测,不过本次更改更新了很多,发现有恶意代码文件时则直接删 除并且在主目录下的check.log里记录上传者的信息及文件,并记录是否删除。并且,本次修改后的像以前弹出的 "超过三次禁止访问"类,是真的做了,不信,你把某一asp木马后辍改为.jpg,然后上传上三次,看会怎样,如果被禁了, 也不要着急,其实是做了cookies,你清除一下cookies即可了。 9、增加上传文件是否为原文件上传功能,后台可以设置,如后台设为原文件上传时,所有上传文件将以原文件上传 ,当服务器中存在已上传的同文件时,则自动在文件后增加_5位随机码。 也可选为用户控制,你可以在前台弹出的上传框中看到。 10、增加前台界面可选是否生成缩略图选顶!不用多说了吧! 11、新增也是我认为很有用的一个功能,即远程获取图片时的高宽限制功能,后台可以设置 本意是相通过简单的asp语言来实现获取远程图片高宽的,但是发现没那么简单,就利用了aspjpeg和fso组件,也就是说 这个功能如果没有这两个组件并存,那不用使用。当图片小于限定的时,将不进行本地化。 如果获取某个网页时,这个功能会很有用,下来的图片就是符合条件的图片,没有小的不能在小的图片! 12、一个很重要的更改,以前官方的所谓自定目录不能严格的称为自定目录,只能称为相对自定目录,是相对于你设定的上传 目录,本次调整完全调整为本站范围内任意目录。 13、修改了弹出式上传功能,详细可以看演示,你可以设定上传自定目录及是否强制使用原文件上传,当然,你后台必需设为 前台用户控制时方可强制使用原文件上传。 14、N多小调整及修改就不多说了!就到这!

28,405

社区成员

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

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