ASP上傳圖片程式碼例子

tomora發表於2013-09-15

index.asp

<table class="tableBorder" width="90%" border="0" align="center" cellpadding="3" cellspacing="1" bgcolor="#D6DBF7">
<form name="newsinfo" method="post" action="saveshjiainfo.asp?action=logo"> <tr>
<td align="center" background="../admin/images/bg_3.gif" height="25" colspan="4"><b><font color="#ffffff">圖片上傳程式</font></b></td></tr>
<tr> <td width="30%" bgcolor="#D6DBF7" align="right">上傳圖片:</td><td width="70%" bgcolor="#D6DBF7">
<INPUT NAME="logo" TYPE="text" ID="logo"    SIZE="20" ></td></tr>
<tr> <td width="30%" bgcolor="#D6DBF7" align="right"></td><td width="70%" bgcolor="#D6DBF7">
<INPUT TYPE="button" NAME="Submit" VALUE="上傳LOGO圖片" ONCLICK="window.open('upload_flash.asp?formname=newsinfo&editname=logo&uppath=bookpic&filelx=jpg','','status=no,scrollbars=no,top=20,left=110,width=420,height=165')">

</td></tr> <tr> <td bgcolor="#D6DBF7"></td><td bgcolor="#D6DBF7">

</td></tr> </form></table>

upfile_flash.asp

<!--#include file="upload_wj.inc"-->
<link href="images/css.css" rel="stylesheet" type="text/css">
<%
set upload=new upload_file
if upload.form("act")="uploadfile" then
filepath=trim(upload.form("filepath"))
filelx=trim(upload.form("filelx"))
i=0
for each formName in upload.File
    set file=upload.File(formName)
fileExt=lcase(file.FileExt) '得到的副檔名不含有.
if file.filesize<100 then
response.write "<script language=javascript>alert('請先選擇你要上傳的檔案!');history.go(-1);</script>"
response.end
end if
if (filelx<>"swf") and (filelx<>"jpg") then
response.write "<script language=javascript>alert('該檔案型別不能上傳!');history.go(-1);</script>"
response.end
end if
if filelx="swf" then
if fileext<>"swf"    then
    response.write "<script language=javascript>alert('只能上傳swf格式的Flash檔案!');history.go(-1);</script>"
    response.end
end if
end if
if filelx="jpg" then
if fileext<>"gif" and fileext<>"jpg"    then
    response.write "<script language=javascript>alert('只能上傳jpg或gif格式的圖片!');history.go(-1);</script>"
    response.end
        end if
end if
if filelx="swf" then
if file.filesize>(3000*1024) then
    response.write "<script language=javascript>alert('Flash檔案大小不能超過3m!');history.go(-1);</script>"
    response.end
end if
end if
if filelx="jpg" then
if file.filesize>(1000*1024) then
    response.write "<script language=javascript>alert('圖片檔案大小不能超過1m!');history.go(-1);</script>"
    response.end
end if
end if

randomize
ranNum=int(90000*rnd)+10000
filename=filepath&year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum&"."&fileExt
%>
<%
if file.FileSize>0 then           ''如果 FileSize > 0 說明有檔案資料
    'file.SaveAs Server.mappath(filename)     ''儲存檔案
    file.SaveToFile Server.mappath(FileName)    '這才是真正的儲存檔案的程式碼.即:file.SaveToFile
    'response.write file.FileName&" 上傳成功! <br>"
    'response.write "新檔名:"&FileName&"<br>"
    'response.write "新檔名已複製到所需的位置,可關閉視窗!"
    if filelx="swf" then
    response.write "<script>window.opener.document."&upload.form("FormName")&".size.value='"&int(file.FileSize/1024)&" K'</script>"
    end if
    response.write "<script>window.opener.document."&upload.form("FormName")&"."&upload.form("EditName")&".value='"&FileName&"'</script>"
%>
<%
end if
set file=nothing
next
set upload=nothing
end if
%>
<script language="javascript">
window.alert("檔案上傳成功!請不要修改生成的連結地址!");
window.close();
</script>

********************************************************************************************

upload_flash.asp

<%
uppath=request("uppath")&"/"     '檔案上傳路徑
filelx=request("filelx")      '檔案上傳型別
formName=request("formName")     '回傳到上頁面編輯框所在Form的Name
EditName=request("EditName")     '回傳到上頁面編輯框的Name
%>
<html><head><title>圖片上傳</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link href="images/css.css" rel="stylesheet" type="text/css">
<script language="javascript">
<!--
function mysub()
{
    esave.style.visibility="visible";
}
-->
</script>
</head>
<body>
<form name="form1" method="post" action="upfile_flash.asp" enctype="multipart/form-data" >
<div id="esave" style="position:absolute; top:18px; left:40px; z-index:10; visibility:hidden">
<TABLE WIDTH=340 BORDER=0 CELLSPACING=0 CELLPADDING=0>
<TR><td width=20%></td>
<TD bgcolor=#ff0000 width="60%">
<TABLE WIDTH=100% height=120 BORDER=0 CELLSPACING=1 CELLPADDING=0>
<TR>
<td bgcolor=#ffffff align=center><font color=red>正在上傳圖片,請稍候...</font></td>
</tr>
</table>
</td><td width=20%></td>
</tr></table></div>
<table class="tableBorder" width="90%" border="0" align="center" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
<tr>
<td align="center" background="images/admin_bg_1.gif"><b><font color="#ffffff">圖片上傳
<input type="hidden" name="filepath" value="<%=uppath%>">
<input type="hidden" name="filelx" value="<%=filelx%>">
<input type="hidden" name="EditName" value="<%=EditName%>">
<input type="hidden" name="FormName" value="<%=formName%>">
<input type="hidden" name="act" value="uploadfile"></font></b>
</td>
</tr>
<tr bgcolor="#E8F1FF">
<td align="center" id="upid" height="80">選擇檔案:
<input type="file" name="file1" size="40" class="tx1" value="">
<input type="submit" name="Submit" value="開始上傳" class="button" onclick="javascript:mysub()">
</td>
</tr>
</table>
</form>
</body>
</html>

upload_wj.inc

<%

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
%>

相關文章