2013年9月27日 星期五

用內建ADO上傳檔案

上傳範例 
Upload.asp

<%@LANGUAGE=VBScript codepage=950 %>
<% Session.Codepage = 950 %>
<%

%>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=big5">
<meta http-equiv="Content-Language" content="zh-tw">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title></title>
</head>
<font size=5 color=green>~上傳圖檔~</font> 檔案大小請勿大於 <%=1024*1024%> bytes      
<form method="POST"  enctype="multipart/form-data" action="uploadx.asp">
<table border="1" cellspacing="0" bordercolor="#C0C0C0" cellpadding="0">
  <tr>
    <td>姓名 :</td>        
    <td> <input type="text" name="PostName" size="50" value=""></td>
    <td> 可有可無</td>
  </tr>
  <tr>
    <td>主題 :</td>        
    <td> <input type="text" name="Title" size="50" value=""></td>
    <td> 可有可無</td>
  </tr>
  <tr>
    <td><font color="#FF0000">檔案 :</font></td>        
    <td> <input type="file" name="Fname" size="42"></td>
    <td> 這當然一定要填的啦~</td>
  </tr>
  <tr>
    <td>     
描述 :</td>        
    <td> <textarea rows="10" name="Desc" cols="50"></textarea></td>
    <td> 可有可無</td>
  </tr>
  <tr>
    <td> </td>
    <td align="center"> 
<input type="submit" value="送出" name="B1">    <input type="reset" value="重新設定" name="B2">
    </td>
    <td> 
 
    </td>
  </tr>
</table>
</form>

=========================================================================
uploadx.asp

<%@LANGUAGE=VBScript codepage=950 %>
<% Session.Codepage = 950 %>
<%

FileSaveToPath="D:\Downloads\showpon\web\public\"
hrefurl="http://xxxx.xxxx.xxxx/showpon/public/"
MaxSize=1024*1024

FormSize=Request.TotalBytes
FormData=Request.BinaryRead(FormSize)

crlfx2= chrb(13) & chrb(10) & chrb(13) & chrb(10)
DivStr = LeftB(FormData,InStrB(FormData,str2bin(VbCrLf)) - 1)
DivLen = LenB(DivStr)
PostNameStar = InStrB(FormData,DivStr)

PostNameStar=instrb(PostNameStar,FormData,str2bin("name="))
PostNameStar=instrb(PostNameStar,FormData,crlfx2)+lenb(crlfx2)
PostNameEnd=instrb(PostNameStar,FormData,DivStr)-2
PostName=midb(FormData,PostNameStar,PostNameEnd-PostNameStar)
PostName=bin2str(PostName)

TitleStar=instrb(PostNameEnd,FormData,str2bin("name="))+6
TitleStar=instrb(TitleStar,FormData,crlfx2)+lenb(crlfx2)
TitleEnd=instrb(TitleStar,FormData,DivStr)-2
Title=midb(FormData,TitleStar,Titleend-TitleStar)
Title=bin2str(Title)

filenameStar=instrb(TitleEnd,FormData,str2bin("filename="))+10
filenameEnd=instrb(filenameStar,FormData,chrb(34))
filename=midb(FormData,filenameStar,filenameend-filenameStar)
filename=bin2str(filename)
If filename="" Then
response.write "你沒有輸入檔案名稱~!!!"
response.end
End If
filename=mid(filename,instrRev(filename,"\")+1)
extname=mid(filename,instrRev(filename,"."))

ContentTypeStr="Content-Type: "
FileContentStar=instrb(filenameEnd,FormData,str2bin(ContentTypeStr))+Len(ContentTypeStr)
FileContentEnd=instrb(FileContentStar,FormData,crlfx2)
FileContent=midb(FormData,FileContentStar,FileContentEnd-FileContentStar)
FileContent=bin2str(FileContent)

FileBinStar=instrb(FileContentEnd,FormData,crlfx2)+Lenb(crlfx2)
FileBinEnd=instrb(FileBinStar,FormData,DivStr)-2

FileSize=FileBinEnd-FileBinStar
If FileSize<=1 Then
response.write "檔案錯誤~!!!"
response.end
ElseIf FileSize>MaxSize Then
response.write "檔案太大,請勿超過 " & MaxSize & " Bytes"
response.end
End If

DescStar=instrb(FileBinEnd,FormData,str2bin("name="))+6
DescStar=instrb(DescStar,FormData,crlfx2)+lenb(crlfx2)
DescEnd=instrb(DescStar,FormData,DivStr)-2
Desctxt=midb(FormData,DescStar,DescEnd-DescStar)
Desctxt=bin2str(Desctxt)

set conn=nothing
Set conn = Server.CreateObject("ADODB.Connection")
DBPath = Server.MapPath("upload.mdb")
'==========================================================================
'conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath
'==========================================================================
strSource = "Provider=Microsoft.Jet.OLEDB.4.0"
strSource = strSource & ";Data Source=" & DBPath
conn.ConnectionString = strSource
conn.Open

Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "select * from img;", conn,1,3
rs.addnew
If PostName="" Then PostName=Empty End If
If Title="" Then Title=Empty End If
If Desctxt="" Then Desctxt=Empty End If

rs("PostName")=PostName
rs("Title")=Title
rs("filename")=filename
rs("Desctxt")=Desctxt

DivStrTxt=bin2str(DivStr)
DivStrTxt=Replace(DivStrTxt,"-","")
rs("DivStr")=DivStrTxt
rs("update")=now()
rs.update
id=rs("id")
rs.close
set rs=nothing
conn.close
set conn=nothing

SaveFileName=id & "_" & DivStrTxt & extname

FileSaveToPath=FileSaveToPath & SaveFileName
temp=Save2File(FileSaveToPath,FormData,FileBinStar,FileSize)

hrefurl=hrefurl & SaveFileName
Desctxt=Server.HTMLEncode(Desctxt)
Desctxt=Replace(Desctxt,vbCrLf , "" & vbCrLf)

%>
<table border="1" cellspacing="1">
  <tr>
    <td>你的姓名 : </td><td> <%=PostName%> </td>
  </tr>
  <tr>
    <td>標題 : </td><td> <%=Title%> </td>
  </tr>
  <tr>
    <td> 圖檔位置 : </td><td> <a target=_blank href="<%=hrefurl%& gt;"><%=hrefurl%></a> </td>
  </tr>
  <tr>
    <td>原始檔名 : </td><td> <%=filename%> </td>
  </tr>
  <tr>
    <td>檔案大小 : </td>
    <td> <%=FileSize%> bytes</td>
  </tr>
  <tr>
    <td>圖檔類型 : </td><td> <%=FileContent%> </td>
  </tr>
  <tr>
    <td>描述 : </td>
    <td><%=Desctxt%></td>
  </tr>
  <tr>
    <td colspan="2">
<%
If instr(FileContent,"image")=0 Then
response.write "你上傳的檔案不是圖形格式~!!!"
Else
response.write "<img src='" & hrefurl & "'>"
End If
%>
    </td>
  </tr>
</table>

<%
'Response.AddHeader "content-disposition","attachment;filename=" & filename
response.end

Function bin2str(binstr)
   Dim varlen,clow,ccc,skipflag
   skipflag=0
   ccc = ""
   If Not IsNull(binstr) Then
      varlen=LenB(binstr)
      For i=1 To varlen
          If skipflag=0 Then
             clow = MidB(binstr,i,1)
             If AscB(clow) > 127 Then
                ccc =ccc & Chr(AscW(MidB(binstr,i+1,1) & clow))
                skipflag=1
             Else
                ccc = ccc & Chr(AscB(clow))
             End If
          Else
             skipflag=0
          End If
      Next
   End If
   bin2str = ccc
End Function


Function str2bin(varstr)
   str2bin=""
   For i=1 To Len(varstr)
       varchar=mid(varstr,i,1)
       varasc = Asc(varchar)
       If varasc<0 Then
          varasc = varasc + 65535
       End If
       If varasc>255 Then
          varlow = Left(Hex(Asc(varchar)),2)
          varhigh = right(Hex(Asc(varchar)),2)
          str2bin = str2bin & chrB("&H" & varlow) & chrB("&H" & varhigh)
       Else
          str2bin = str2bin & chrB(AscB(varchar))
       End If
   Next
End Function

Function Save2File(FileName,binInput,imgstar,imglen)
      Dim GP_strm1, GP_strm2
      Set GP_strm1 = Server.CreateObject("ADODB.Stream")
      Set GP_strm2 = Server.CreateObject("ADODB.Stream")
     
      GP_strm1.Open
      GP_strm1.Type = 1 'Binary
      GP_strm2.Open
      GP_strm2.Type = 1 'Binary
       
      GP_strm1.Write binInput
      GP_strm1.Position = imgstar-1
      GP_strm1.CopyTo GP_strm2,imglen

GP_strm2.SaveToFile FileName,2         ' adSaveCreateNotExist 1 或選 adSaveCreateOverWrite 2
GP_strm1.Close
GP_strm2.Close
set GP_strm1 = nothing
set GP_strm2 = nothing
Save2File=FileName
End Function

%>