推薦:怎樣使ASP獲得代碼中第一張圖片地址以下為引用的內容: '把pattern 又修改了下'code要檢測的代碼'http://www.knowsky.com/asp.asp'leixing html 或者ubb'nopic 代碼沒有
| 以下為引用的內容: Example.asp <%@LANGUAGE=VBSCRIPT CODEPAGE=65001%> <!--#include file=SundyUpload.asp--> <% '此例子文檔編碼都是UTF-8,如果是其他編碼的系統,請將編碼轉換為相應的編碼,不然表單獲取數據可能會亂碼 Dim objUpload,opt Dim xmlPath Dim fileFormName,objFile,counter opt = request.QueryString(opt) If opt = Upload Then xmlPath = Server.MapPath(request.QueryString(xmlPath))'將虛擬路徑轉換為實際路徑 Set objUpload=new SundyUpload '建立上傳對象 objUpload.UploadInit xmlPath,utf-8 counter = 1 Response.Write(普通表單: & objUpload.Form(normalForm) & <BR><BR>)'獲取表單數據 For Each fileFormName In objUpload.objFile Set objFile=objUpload.objFile(fileFormName) fileSize = objFile.FileSize strTemp= objFile.FilePath Response.Write strTemp fileName = mid(strTemp,InStrRev(strTemp, /) 1) If fileSize > 0 Then Response.Write(File Size: & fileSize & <BR>) Response.Write(File Name: & objFile.FilePath & <BR>) ' Response.Write(File Description: & objUpload.Form(fileDesc & counter) & <BR><BR>) objFile.SaveAs Server.MapPath(.) & /upload/ & fileName Response.Write Save at: &Server.MapPath(.) & /upload/ & fileName & <br><br> End If counter = counter 1 Next End If '為上載進度條數據文件(XML文件指定虛擬路徑) '最好是隨機的,因為可能多個人同時上載,需要不同的進度數據 '這個路徑需要在提交的時候傳入上載組件中,以便在上載過程中更改進度數據 '客戶端使用Javascript來讀取此XML文件,顯示進度 xmlPath = upload/ & Timer & .xml %> <html> <head> <meta http-equiv=Content-Type content=text/html; charset=utf-8 /> <title>Sundy Upload Progress Bar Example</title> <script language=javascript> function chkFrm(){ var objFrm = document.frmUpload; if (objFrm.file1.value== && objFrm.file2.value==){ alert(請選擇一個文件); objFrm.file1.focus(); return false; } objFrm.action = Example.asp?opt=Upload&xmlPath=<%=xmlPath%>; startProgress('<%=xmlPath%>');//啟動進度條 return true; } </script> </head> <body> <form name=frmUpload method=post action=Example.asp enctype=multipart/form-data onSubmit=return chkFrm()> 普通表單:<BR><input type=text name=normalForm size=40><BR><BR> 文件1:<BR> <input type=file name=file1 size=40></br> <input type=text name=fileDesc1 size=30><BR><BR> 文件2:<BR> <input type=file name=file2 size=40></br> <input type=text name=fileDesc2 size=30><BR> 文件3:<BR> <input type=file name=file3 size=40></br> 文件4:<BR> <input type=file name=file4 size=40></br> 文件5:<BR> <input type=file name=file5 size=40></br> <input type=submit name=btnSubmit value=submit/> </form> </body> </html> SundyUpload.asp <meta http-equiv=Content-Type content=text/html; charset=utf-8 /> <% Dim SundyUpload_SourceData Class SundyUpload Dim objForm,objFile,Version,objProgress Dim xmlPath,CharsetEncoding Public Function Form(strForm) strForm=lcase(strForm) If NOT objForm.exists(strForm) Then Form= Else Form=objForm(strForm) End If End Function Public Function File(strFile) strFile=lcase(strFile) If NOT objFile.exists(strFile) Then Set File=new FileInfo Else Set File=objFile(strFile) End If End Function Public Sub UploadInit(progressXmlPath,charset) Dim RequestData,sStart,Crlf,sInfo,iInfoStart,iInfoEnd,tStream,iStart,theFile Dim iFileSize,sFilePath,sFileType,sFormValue,sFileName Dim iFindStart,iFindEnd Dim iFormStart,iFormEnd,sFormName Version=Upload Width Progress Bar Version 1.0 Set objForm=Server.CreateObject(Scripting.Dictionary) Set objFile=Server.CreateObject(Scripting.Dictionary) If Request.TotalBytes<1 Then Exit Sub Set tStream = Server.CreateObject(adodb.stream) Set SundyUpload_SourceData = Server.CreateObject(adodb.stream) SundyUpload_SourceData.Type = 1 SundyUpload_SourceData.Mode =3 SundyUpload_SourceData.Open Dim TotalBytes Dim ChunkReadSize Dim DataPart, PartSize Dim objProgress TotalBytes = Request.TotalBytes ' 總大小 ChunkReadSize = 64 * 1024 ' 分塊大小64K BytesRead = 0 xmlPath = progressXmlPath CharsetEncoding = charset If CharsetEncoding = Then CharsetEncoding = utf-8 End If Set objProgress = New Progress objProgress.ProgressInit(xmlPath) objProgress.UpdateProgress Totalbytes,0 '循環分塊讀取 Do While BytesRead < TotalBytes '分塊讀取 PartSize = ChunkReadSize If PartSize BytesRead > TotalBytes Then PartSize = TotalBytes - BytesRead DataPart = Request.BinaryRead(PartSize) BytesRead = BytesRead PartSize SundyUpload_SourceData.Write DataPart objProgress.UpdateProgress Totalbytes,BytesRead Loop 'SundyUpload_SourceData.Write Request.BinaryRead(Request.TotalBytes) SundyUpload_SourceData.Position=0 RequestData =SundyUpload_SourceData.Read iFormStart = 1 iFormEnd = LenB(RequestData) Crlf = chrB(13) & chrB(10) sStart = MidB(RequestData,1, InStrB(iFormStart,RequestData,Crlf)-1) iStart = LenB (sStart) iFormStart=iFormStart iStart 1 While (iFormStart 10) < iFormEnd iInfoEnd = InStrB(iFormStart,RequestData,Crlf & Crlf) 3 tStream.Type = 1 tStream.Mode =3 tStream.Open SundyUpload_SourceData.Position = iFormStart SundyUpload_SourceData.CopyTo tStream,iInfoEnd-iFormStart tStream.Position = 0 tStream.Type = 2 tStream.Charset =CharsetEncoding sInfo = tStream.ReadText tStream.Close '取得表單項目名稱 iFormStart = InStrB(iInfoEnd,RequestData,sStart) iFindStart = InStr(22,sInfo,name=,1) 6 iFindEnd = InStr(iFindStart,sInfo,,1) sFormName = lcase(Mid (sinfo,iFindStart,iFindEnd-iFindStart)) '如果是文件 If InStr (45,sInfo,filename=,1) > 0 Then Set theFile=new FileInfo '取得文件名 iFindStart = InStr(iFindEnd,sInfo,filename=,1) 10 iFindEnd = InStr(iFindStart,sInfo,,1) sFileName = Mid (sinfo,iFindStart,iFindEnd-iFindStart) theFile.FileName=getFileName(sFileName) theFile.FilePath=getFilePath(sFileName) '取得文件類型 iFindStart = InStr(iFindEnd,sInfo,Content-Type: ,1) 14 iFindEnd = InStr(iFindStart,sInfo,vbCr) theFile.FileType =Mid (sinfo,iFindStart,iFindEnd-iFindStart) theFile.FileStart =iInfoEnd theFile.FileSize = iFormStart -iInfoEnd -3 theFile.FormName=sFormName If NOT objFile.Exists(sFormName) Then objFile.add sFormName,theFile End If Else '如果是表單項目 tStream.Type =1 tStream.Mode =3 tStream.Open SundyUpload_SourceData.Position = iInfoEnd SundyUpload_SourceData.CopyTo tStream,iFormStart-iInfoEnd-3 tStream.Position = 0 tStream.Type = 2 tStream.Charset = CharsetEncoding sFormValue = tStream.ReadText tStream.Close If objForm.Exists(sFormName) Then objForm(sFormName)=objForm(sFormName)&, &sFormValue Else objForm.Add sFormName,sFormValue End If End If iFormStart=iFormStart iStart 1 Wend RequestData= Set tStream = Nothing End Sub Private Sub Class_Initialize End Sub Private Sub Class_Terminate If Request.TotalBytes>0 Then objForm.RemoveAll objFile.RemoveAll Set objForm=Nothing Set objFile=Nothing SundyUpload_SourceData.Close Set SundyUpload_SourceData = Nothing End If Set objProgress = Nothing Set objFso = Server.CreateObject(Scripting.FileSystemObject) If objFso.FileExists(xmlPath) Then objFso.DeleteFile(xmlPath) End If Set objFso = 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 End Class Class FileInfo Dim FormName,FileName,FilePath,FileSize,FileType,FileStart Private Sub Class_Initialize FileName = FilePath = FileSize = 0 FileStart= 0 FormName = FileType = End Sub Public Function SaveAs(FullPath) Dim dr,ErrorChar,i SaveAs=True 'Response.Write fullpath & .....................<br> 'FileName=ss.txt If trim(fullpath)= or FileStart=0 or fileName= or right(fullpath,1)=/ Then Exit Function 'Response.Write 2........................<br> Set dr=CreateObject(Adodb.Stream) dr.Mode=3 dr.Type=1 dr.Open SundyUpload_SourceData.position=FileStart SundyUpload_SourceData.copyto dr,FileSize dr.SaveToFile FullPath,2 dr.Close Set dr=Nothing SaveAs=False End Function End Class Class Progress Dim objDom,xmlPath Dim startTime Private Sub Class_Initialize End Sub Public Sub ProgressInit(xmlPathTmp) Dim objRoot,objChild Dim objPI xmlPath = xmlPathTmp Set objDom = Server.CreateObject(Microsoft.XMLDOM) Set objRoot = objDom.createElement(progress) objDom.appendChild objRoot Set objChild = objDom.createElement(totalbytes) objChild.Text = 0 objRoot.appendChild objChild Set objChild = objDom.createElement(uploadbytes) objChild.Text = 0 objRoot.appendChild objChild Set objChild = objDom.createElement(uploadpercent) objChild.Text = 0% objRoot.appendChild objChild Set objChild = objDom.createElement(uploadspeed) objChild.Text = 0 objRoot.appendChild objChild Set objChild = objDom.createElement(totaltime) objChild.Text = 00:00:00 objRoot.appendChild objChild Set objChild = objDom.createElement(lefttime) objChild.Text = 00:00:00 objRoot.appendChild objChild Set objPI = objDom.createProcessingInstruction(xml,version='1.0' encoding='utf-8') objDom.insertBefore objPI, objDom.childNodes(0) objDom.Save xmlPath Set objPI = Nothing Set objChild = Nothing Set objRoot = Nothing Set objDom = Nothing End Sub Sub UpdateProgress(tBytes,rBytes) Dim eTime,currentTime,speed,totalTime,leftTime,percent If rBytes = 0 Then startTime = Timer Set objDom = Server.CreateObject(Microsoft.XMLDOM) objDom.load(xmlPath) objDom.selectsinglenode(//totalbytes).text=tBytes objDom.save(xmlPath) Else speed = 0.0001 currentTime = Timer eTime = currentTime - startTime If eTime>0 Then speed = rBytes / eTime totalTime = tBytes / speed leftTime = (tBytes - rBytes) / speed percent = Round(rBytes *100 / tBytes) 'objDom.selectsinglenode(//uploadbytes).text = rBytes 'objDom.selectsinglenode(//uploadspeed).text = speed 'objDom.selectsinglenode(//totaltime).text = totalTime 'objDom.selectsinglenode(//lefttime).text = leftTime objDom.selectsinglenode(//uploadbytes).text = FormatFileSize(rBytes) & / & FormatFileSize(tBytes) objDom.selectsinglenode(//uploadpercent).text = percent objDom.selectsinglenode(//uploadspeed).text = FormatFileSize(speed) & /sec objDom.selectsinglenode(//totaltime).text = SecToTime(totalTime) objDom.selectsinglenode(//lefttime).text = SecToTime(leftTime) objDom.save(xmlPath) End If End Sub private Function SecToTime(sec) Dim h:h = 0 Dim m:m = 0 Dim s:s = 0 h = round(sec / 3600) m = round( (sec mod 3600) / 60) s = round(sec mod 60) If LEN(h)=1 Then h = 0 & h If LEN(m)=1 Then m = 0 & m If LEN(s)=1 Then s = 0 & s SecToTime = (h & : & m & : & s) End Function private Function FormatFileSize(fsize) Dim radio,k,m,g,unitTMP k = 1024 m = 1024*1024 g = 1024*1024*1024 radio = 1 If Fix(fsize / g) > 0.0 Then unitTMP = GB radio = g ElseIf Fix(fsize / m) > 0 Then unitTMP = MB radio = m ElseIf Fix(fsize / k) > 0 Then unitTMP = KB radio = k Else unitTMP = B radio = 1 End If If radio = 1 Then FormatFileSize = fsize & & unitTMP Else FormatFileSize = FormatNumber(fsize/radio,3) & unitTMP End If End Function Private Sub Class_Terminate Set objDom = Nothing End Sub End Class 'http://www.CuoXIn.com/ %> <script language=javascript> //啟動進度條 function startProgress(xmlPath){ displayProgress(); setProgressDivPos(); setTimeout(DisplayProgressBar(' xmlPath '),500); } function DisplayProgressBar(xmlPath){ var xmlDoc = new ActiveXObject(Msxml2.DOMDocument.3.0); xmlDoc.async = false; xmlDoc.load(xmlPath); if (xmlDoc.parseError.errorCode!=0){ var error = xmlDoc.parseError; alert(error.reason) setTimeout(DisplayProgressBar(' xmlPath '),1000); return; } var root = xmlDoc.documentElement; //根節點 var totalbytes = root.childNodes(0).text; var uploadbytes = root.childNodes(1).text; var percent = root.childNodes(2).text; ProgressPercent.innerHTML = percent %; ProgressBar.style.width = percent %; uploadSize.innerHTML = uploadbytes; uploadSpeed.innerHTML = root.childNodes(3).text; totalTime.innerHTML = root.childNodes(4).text; leftTime.innerHTML = root.childNodes(5).text; if (percent<100){ setTimeout(DisplayProgressBar(' xmlPath '),1000); } } function displayProgress(){ var objProgress = document.getElementById(Progress); objProgress.style.display = ; } function closeProgress(){ var objProgress = document.getElementById(Progress); objProgress.style.display = none; } function setProgressDivPos(){ var objProgress = document.getElementById(Progress); objProgress.style.top = document.body.scrollTop (document.body.clientHeight-document.getElementById(Progress).offsetHeight)/2 objProgress.style.left = document.body.scrollLeft (document.body.clientWidth-document.getElementById(Progress).offsetWidth)/2; } </script> <style type=text/css> .progress { position: absolute; padding: 4px; top: 50; left: 400; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 12px; width: 250px; height:100px; background: #FFFBD1; color: #3D2C05; border: 1px solid #715208; /* Mozilla proprietary */ -moz-border-radius: 5px; /*-moz-opacity: 0.95; */ } .progress table,.progress td{ font-size:9pt; } .Bar{ width:100%; height:15px; background-color:#CCCCCC; border: 1px inset #666666; margin-bottom:4px; } .ProgressPercent{ font-size: 9pt; color: #000000; height: 15px; position: absolute; z-index: 20; width: 100%; text-align: center; } .ProgressBar{ background-color:#91D65C; width:1px; height:15px; } </style> <div id=Progress style=display:none; class=progress> <div class=bar> <div id=ProgressPercent class=ProgressPercent>0%</div> <div id=ProgressBar class=ProgressBar></div> </div> <table border=0 cellspacing=0 cellpadding=2> <tr> <td>已經上傳</td> <td>:</td> <td id=uploadSize></td> </tr> <tr> <td>上傳速度</td> <td>:</td> <td id=uploadSpeed> </td> </tr> <tr> <td>共需時間</td> <td>:</td> <td id=totalTime> </td> </tr> <tr> <td>剩餘時間</td> <td>:</td> <td id=leftTime> </td> </tr> </table> </div> |
分享:淺析ASP-server.URLEncode反函數:urldecode如果有空格就用代替,如果有其它字符就用%ASCII代替,如果有漢字等四個字節的字符,就用兩個%ASCII來代替。不過有時候我們也需要將經過這種編碼的字符串進行解碼,但asp並沒有提供相關的