您的位置:首页 > 编程语言 > ASP

asp无组件上传图片并生成缩略图

2008-11-07 10:39 531 查看
先创建一文件夹,并创建虚拟目录或站长点。

1.增加上传页xAdd.html

<html>

<head>

<title>无组件上传</title>

</head>

<body>

<form method="POST" name="myform" action="xSave.asp" target="_self">

<input name="PicPath" type="text" id="PicPath" readonly="true">

<input name="sPicPath" type="hidden" id="sPicPath">

<iframe id="Upload" src="upload.htm" frameborder=0 scrolling=no width="100%" height="20"></iframe>

<img src="" id="objimg" style="display:none;" />

</form>

</body>

</html>

2.上传页upload.htm

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<SCRIPT language=javascript>

function check_file()

{

var strFileName=form.FileName.value;

if (strFileName=="")

{

alert("请选择要上传的文件");

return false;

}

}

</SCRIPT>

</head>

<body leftmargin="0" topmargin="0">

<form action="upfile.asp" method="post" name="form1" enctype="multipart/form-data">

<input name="FileName" type="FILE" class="tx1" size="20" onChange="window.parent.document.getElementById('objimg').src=this.value;window.parent.document.getElementById('objimg').style.display='';">

<input type="submit" name="Submit" value="上传">

</form>

</body>

</html>

3.上传保存代码页upfile.asp

<!--#include file="upload.asp"-->

<%

Const MaxFileSize=300 '上传文件大小限制单位k

Const UpFileType="gif|jpg|bmp|png" '允许的上传文件类型

set fs=createobject("scripting.filesystemobject")

%>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

</head>

<body>

<%

call upload_0() '使用化境无组件上传类

%>

</body>

</html>

<%

sub upload_0() '使用化境无组件上传类

set upload=new upload_file '建立上传对象

for each formName in upload.file '列出所有上传了的文件

set file=upload.file(formName) '生成一个文件对象

if file.filesize<100 then

msg="请先选择你要上传的文件!"

founderr=true

end if

if file.filesize>(MaxFileSize*1024) then

msg="文件大小超过了限制,最大只能上传" & CStr(MaxFileSize) & "K的文件!"

founderr=true

end if

fileExt=lcase(file.FileExt)

Forumupload=split(UpFileType,"|")

for i=0 to ubound(Forumupload)

if fileEXT=trim(Forumupload(i)) then

EnableUpload=true

exit for

end if

next

if fileEXT="asp" or fileEXT="asa" or fileEXT="aspx" then

EnableUpload=false

end if

if EnableUpload=false then

msg="这种文件类型不允许上传!/n/n只允许上传这几种文件类型:" & UpFileType

response.write"<SCRIPT language=JavaScript>alert('这种文件类型不允许上传!/n/n只允许上传这几种文件类型:" & UpFileType & "');"

response.write"javascript:history.go(-1)</SCRIPT>"

founderr=true

end if

strJS="<SCRIPT language=javascript>" & vbcrlf

if founderr<>true then

randomize

ranNum=int(900*rnd)+100

filename=year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum"."

file.SaveToFile Server.mappath(FileName) '保存文件

file_on=Server.mappath(FileName)

if fs.FileExists(file_on) then

Set Jpeg = Server.CreateObject("Persits.Jpeg")

Jpeg.Open file_on

IW=Jpeg.OriginalWidth

IH=Jpeg.OriginalHeight

XH=130

XW=130

If IH>IW Then

VW =cint( XH*IW/IH)

VH=XH

Else

if IH=IW THEN

VW=XW

VH=XH

ELSE

VW = XW

VH=cint(XW*IH/IW)

end if

End If

Jpeg.Width = VW

Jpeg.Height = VH

fname1=split(Filename,"/")

chsave="s"&fname1(Ubound(fname1))

Jpeg.Save Server.MapPath(chsave)

Jpeg.close

Set Jpeg = nothing

msg="保存缩位图成功! --"

else

msg="保存缩位图不成功!--"

end if

msg=msg"上传文件成功!"

FileType=right(fileExt,3)

strJS=strJS & "window.parent.document.getElementById('PicPath').value='" & replace(filename,"../","") & "';" & vbcrlf

strJS=strJS & "window.parent.document.getElementById('sPicPath').value='" & replace(chsave,"../","") & "';" & vbcrlf

end if

strJS=strJS & "alert('" & msg & "');" & vbcrlf

strJS=strJS & "history.go(-1);" & vbcrlf

strJS=strJS & "</script>"

response.write strJS

set file=nothing

next

set upload=nothing

end sub

%>

4.upload.asp页

<%

'----------------------------------------------------------------------

'转发时请保留此声明信息,这段声明不并会影响你的速度!

'******************* 无组件上传类 ********************************

'声明:此上传类是在化境编程界发布的无组件上传类的基础上修改的.

'在与化境编程界无组件上传类相比,速度快了将近50倍,当上传4M大小的文件时

'服务器只需要10秒就可以处理完,是目前最快的无组件上传程序,当前版本为0.96

'源代码公开,免费使用,对于商业用途,请与作者联系

'文件属性:例如上传文件为c:/myfile/doc.txt

'FileName 文件名 字符串 "doc.txt"

'FileSize 文件大小 数值 1210

'FileType 文件类型 字符串 "text/plain"

'FileExt 文件扩展名 字符串 "txt"

'FilePath 文件原路径 字符串 "c:/myfile"

'使用时注意事项:

'由于Scripting.Dictionary区分大小写,所以在网页及ASP页的项目名都要相同的大小

'写,如果人习惯用大写或小写,为了防止出错的话,可以把

'sFormName = Mid (sinfo,iFindStart,iFindEnd-iFindStart)

'改为

'(小写者)sFormName = LCase(Mid (sinfo,iFindStart,iFindEnd-iFindStart))

'(大写者)sFormName = UCase(Mid (sinfo,iFindStart,iFindEnd-iFindStart))

'**********************************************************************

'----------------------------------------------------------------------

dim oUpFileStream

Class upload_file

dim Form,File,Version

Private Sub Class_Initialize

'定义变量

dim RequestBinDate,sStart,bCrLf,sInfo,iInfoStart,iInfoEnd,tStream,iStart,oFileInfo

dim iFileSize,sFilePath,sFileType,sFormvalue,sFileName

dim iFindStart,iFindEnd

dim iFormStart,iFormEnd,sFormName

'代码开始

Version="无组件上传类 Version 0.96"

set Form = Server.CreateObject("Scripting.Dictionary")

set File = Server.CreateObject("Scripting.Dictionary")

if Request.TotalBytes < 1 then Exit Sub

set tStream = Server.CreateObject("adodb.stream")

set oUpFileStream = Server.CreateObject("adodb.stream")

oUpFileStream.Type = 1

oUpFileStream.Mode = 3

oUpFileStream.Open

oUpFileStream.Write Request.BinaryRead(Request.TotalBytes)

oUpFileStream.Position=0

RequestBinDate = oUpFileStream.Read

iFormEnd = oUpFileStream.Size

bCrLf = chrB(13) & chrB(10)

'取得每个项目之间的分隔符

sStart = MidB(RequestBinDate,1, InStrB(1,RequestBinDate,bCrLf)-1)

iStart = LenB (sStart)

iFormStart = iStart+2

'分解项目

Do

iInfoEnd = InStrB(iFormStart,RequestBinDate,bCrLf & bCrLf)+3

tStream.Type = 1

tStream.Mode = 3

tStream.Open

oUpFileStream.Position = iFormStart

oUpFileStream.CopyTo tStream,iInfoEnd-iFormStart

tStream.Position = 0

tStream.Type = 2

tStream.Charset ="gb2312"

sInfo = tStream.ReadText

'取得表单项目名称

iFormStart = InStrB(iInfoEnd,RequestBinDate,sStart)-1

iFindStart = InStr(22,sInfo,"name=""",1)+6

iFindEnd = InStr(iFindStart,sInfo,"""",1)

sFormName = Mid (sinfo,iFindStart,iFindEnd-iFindStart)

'如果是文件

if InStr (45,sInfo,"filename=""",1) > 0 then

set oFileInfo= new FileInfo

'取得文件属性

iFindStart = InStr(iFindEnd,sInfo,"filename=""",1)+10

iFindEnd = InStr(iFindStart,sInfo,"""",1)

sFileName = Mid (sinfo,iFindStart,iFindEnd-iFindStart)

oFileInfo.FileName = GetFileName(sFileName)

oFileInfo.FilePath = GetFilePath(sFileName)

oFileInfo.FileExt = GetFileExt(sFileName)

iFindStart = InStr(iFindEnd,sInfo,"Content-Type: ",1)+14

iFindEnd = InStr(iFindStart,sInfo,vbCr)

oFileInfo.FileType = Mid (sinfo,iFindStart,iFindEnd-iFindStart)

oFileInfo.FileStart = iInfoEnd

oFileInfo.FileSize = iFormStart -iInfoEnd -2

oFileInfo.FormName = sFormName

file.add sFormName,oFileInfo

else

'如果是表单项目

tStream.Close

tStream.Type = 1

tStream.Mode = 3

tStream.Open

oUpFileStream.Position = iInfoEnd

oUpFileStream.CopyTo tStream,iFormStart-iInfoEnd-2

tStream.Position = 0

tStream.Type = 2

tStream.Charset = "gb2312"

sFormvalue = tStream.ReadText

form.Add sFormName,sFormvalue

end if

tStream.Close

iFormStart = iFormStart+iStart+2

'如果到文件尾了就退出

loop until (iFormStart+2) = iFormEnd

RequestBinDate=""

set tStream = nothing

End Sub

Private Sub Class_Terminate

'清除变量及对像

if not Request.TotalBytes<1 then

oUpFileStream.Close

set oUpFileStream =nothing

end if

Form.RemoveAll

File.RemoveAll

set Form=nothing

set File=nothing

End Sub

'取得文件路径

Private function GetFilePath(FullPath)

If FullPath <> "" Then

GetFilePath = left(FullPath,InStrRev(FullPath, "/"))

Else

GetFilePath = ""

End If

End function

'取得文件名

Private function GetFileName(FullPath)

If FullPath <> "" Then

GetFileName = mid(FullPath,InStrRev(FullPath, "/")+1)

Else

GetFileName = ""

End If

End function

'取得扩展名

Private function GetFileExt(FullPath)

If FullPath <> "" Then

GetFileExt = mid(FullPath,InStrRev(FullPath, ".")+1)

Else

GetFileExt = ""

End If

End function

End Class

'文件属性类

Class FileInfo

dim FormName,FileName,FilePath,FileSize,FileType,FileStart,FileExt

Private Sub Class_Initialize

FileName = ""

FilePath = ""

FileSize = 0

FileStart= 0

FormName = ""

FileType = ""

FileExt = ""

End Sub

'保存文件方法

Public function SaveToFile(FullPath)

dim oFileStream,ErrorChar,i

SaveToFile=1

if trim(fullpath)="" or right(fullpath,1)="/" then exit function

set oFileStream=CreateObject("Adodb.Stream")

oFileStream.Type=1

oFileStream.Mode=3

oFileStream.Open

oUpFileStream.position=FileStart

oUpFileStream.copyto oFileStream,FileSize

oFileStream.SaveToFile FullPath,2

oFileStream.Close

set oFileStream=nothing

SaveToFile=0

end function

End Class

%>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: