⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 admin_saveremoteimages.asp

📁 依蓝旅游网站管理系统Elan2008.SP2
💻 ASP
字号:
<%
Class SaveRemoteImages
  Private SRI_Error, SRI_ImagesList, SRI_Flag, SRI_SubFolder
  Private SRI_CreateWatermark, SRI_CreateThumb
  
  Private Sub Class_Initialize
     SRI_Error = 0
	 SRI_ImagesList = ""
	 SRI_Flag = False
	 SRI_CreateWatermark = False
	 SRI_CreateThumb = False
	 SRI_SubFolder = Year(date()) & Right("0"& Month(date()), 2)
  End Sub
  
  Private Sub Class_Terminate	
     SRI_Error = 0
  End Sub
  
  Public Property Get GetImagesList() '取得下载后的图片文件
     GetImagesList = SRI_ImagesList
  End Property
  
  Public Property Get GetSRI_Flag() '是否有系统外部的图片
     GetSRI_Flag = SRI_Flag
  End Property
  
  Public Property Let SetCreateWatermark(EnableWatermark)
     If Trim(LCase(TypeName(EnableWatermark))) = "boolean" Then
        SRI_CreateWatermark = EnableWatermark
	 End If
  End Property
  
  Public Property Let SetCreateThumb(EnableCreateThumb)
     If Trim(LCase(TypeName(EnableCreateThumb))) = "boolean" Then
        SRI_CreateThumb = EnableCreateThumb
	 End If
  End Property
  
  Public Function AutoSave(SRI_Content, SRI_UploadDir)
     On Error Resume Next
	 SRI_Flag = False
	 Dim objRegExp, Matches, Result, i, Match
     Dim ArrImages, AllImages, NewImages, NewFileName, NewImagesTrue
     Dim ArrNewImages, ArrAllImages, ArrFailImages
	 Dim JpegWatermark, FileTruePath, TempFlag
	 Dim ThumbFileName, JpegErrorCode
     Set objRegExp = New Regexp
     objRegExp.IgnoreCase = True
     objRegExp.Global = True
     objRegExp.Pattern = "<IMG.+?>"
     Result = ""
     Set Matches = objRegExp.Execute(Trim(SRI_Content))
     For Each Match in Matches
       Result = Result & GetImages(Match.Value)
     Next 
     If Trim(Result)="" Then
	    SRI_Flag = False
        AutoSave = SRI_Content		
	    Exit Function
     Else
	    SRI_Flag = True
	 End If
     ArrImages = Split(Result,"|")
     AllImages = ""
     NewImages = ""
	 ArrFailImages = ""
     Response.Write "<p><span class='blueText'><strong>内容包含系统外部图片,正在保存远程图片…… 在此过程中不要刷新!!!</strong></span></p>"
     Response.Flush()
	 
     Dim ImageCount,FailCount,SuccCount
     ImageCount = 0
	 FailCount = 0
	 SuccCount = 0
	 
	 Call CreateFolder(Server.MapPath(SRI_UploadDir), "\"& SRI_SubFolder) '检查并创建保存文件路径
	 
     For i=1 To Ubound(ArrImages)
        If ArrImages(i)<>"" And Instr(AllImages,ArrImages(i))<1 Then '看这个图片是否已经下载过
           NewFileName = Cstr(GetRndNumber & Mid(ArrImages(i),InstrRev(ArrImages(i),".")))
		   Response.Write "<p><span class='redText'><strong>正在保存远程图片 "& (ImageCount+1) &":</strong></span><span class='blueText'>"& ArrImages(i) &" …… </span>&nbsp;"
		   Response.Flush()
           Call SaveImage(ArrImages(i), SRI_UploadDir & SRI_SubFolder &"/"& NewFileName)
		   If SRI_Error = 0 Then
		      Response.Write "成功!</p>"
			  SuccCount = SuccCount + 1  
			  AllImages = AllImages &"|"& ArrImages(i)  '把保存下来的图片的地址串回起来,以确定要替换的地址
              NewImages = NewImages &"|"& SRI_SubFolder &"/"& NewFileName  '把本地的地址串回起来		
			  NewImagesTrue	= NewImagesTrue &"|"& SRI_SubFolder &"/"& NewFileName 
			  
			   
			  JpegErrorCode = 0
		      TempFlag = False
			  FileTruePath = Server.MapPath(SRI_UploadDir & SRI_SubFolder &"/"& NewFileName)  
			  
			  If SRI_CreateWatermark = True Then '添加水印		          
	              Set JpegWatermark = New ClassJpeg
		          If JpegWatermark.ErrorCode = 0 Then
	                 JpegWatermark.CreateWatermark FileTruePath
	                 If SRI_CreateThumb = True Then
	                    JpegWatermark.CreateThumb FileTruePath, 1 
			            ThumbFileName = SRI_SubFolder &"/"& JpegWatermark.ThumbFileName
			            JpegErrorCode = JpegWatermark.ErrorCode
		                TempFlag = True
	                 End If
		          End If
	              Set JpegWatermark = Nothing
		      End If
		
		      If SRI_CreateThumb = True And TempFlag = False Then '产生缩略图
                  Dim JpegThumb
	              Set JpegThumb = New ClassJpeg
	              JpegThumb.CreateThumb FileTruePath, 1 
		          ThumbFileName = SRI_SubFolder &"/"& JpegThumb.ThumbFileName
		          JpegErrorCode = JpegThumb.ErrorCode
	              Set JpegThumb = Nothing
              End If
			  
			  If SRI_CreateThumb = True And JpegErrorCode = 0 Then  '把缩略图的地址串回起来
			     NewImagesTrue = NewImagesTrue &"|"& ThumbFileName
			  End If			  
			  			  
		   ElseIf SRI_Error = 2 Then
		      Response.Write "<span class='redText'>失败!</span>,保存路径错误</p>"
			  FailCount = FailCount + 1
			  ArrFailImages = ArrFailImages &"|"& ArrImages(i)
		   Else
		      Response.Write "<span class='redText'>失败!</span></p>"
			  FailCount = FailCount + 1
			  ArrFailImages = ArrFailImages &"|"& ArrImages(i)
		   End If
		   SRI_Error = 0
		   Response.Write "<script>scrollBy(0,document.body.scrollHeight)</script>"
		   Response.Flush()           
		   ImageCount = ImageCount + 1
         End If
     Next
	  
     Response.Write "<p>"
	 Response.Write "<span class='blueText'>成功保存的图片:<span class='redText'><strong>"& SuccCount &"</strong></span> 张</span>"
	 Response.Write "<script>scrollBy(0,document.body.scrollHeight)</script>"
	 Response.Flush()
	 If Trim(ArrFailImages) <> "" Then
	    Response.Write "<br><span class='redText'>保存失败的图片:<strong><span class='redText'>"& FailCount &"</span></strong> 张</span><br>"
		Response.Flush()
		ArrFailImages = Split(ArrFailImages,"|")
		For i=1 To Ubound(ArrFailImages)
	       Response.Write "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp<span class='blueText'><strong>"& i &"</strong>:"& ArrFailImages(i) &"</span><br>"
		   Response.Write "<script>scrollBy(0,document.body.scrollHeight)</script>"
		   Response.Flush()
	    Next
	 End If
	 Response.Write "</p>&nbsp;<br><p>&nbsp;</p>"	
	 Response.Flush()
	 Response.Write "<script>scrollBy(0,document.body.scrollHeight)</script>"
	 Response.Flush()	 
     ArrAllImages = Split(AllImages,"|")
     ArrNewImages = Split(NewImages,"|")
     Result = Trim(SRI_Content)
     For i=1 To Ubound(ArrNewImages) '执行循环替换原来的地址
        Result = Replace(Result,ArrAllImages(i),SRI_UploadDir & ArrNewImages(i))
     Next
	 AutoSave = Result
	 
	 If Trim(NewImagesTrue) <> "" Then NewImagesTrue = Right(NewImagesTrue, Len(NewImagesTrue)-1)
	 SRI_ImagesList =  NewImagesTrue     
  End Function
  
  Private Function GetImages(ByVal str)
     GetImages = ""
     Dim objRegExp,Matchs,TempMatch, Host, Temp
     Set objRegExp = New Regexp
     objRegExp.IgnoreCase = True
     objRegExp.Global = True
     objRegExp.Pattern = "http://.+?"""
	 Host = lCase(Request.ServerVariables("HTTP_HOST"))
     Set TempMatch = objRegExp.Execute(str)
     For Each Matchs in TempMatch
	    Temp = lCase(Right(Matchs.Value, Len(Matchs.Value)-7))
		If Left(Temp, Instr(Temp, "/")-1) <> Host Then		
           GetImages = GetImages &"|"& Left(Matchs.Value, Len(Matchs.Value)-1)
		End If
     Next	 
  End Function  
  
  Private Sub SaveImage(ByVal URLString, ByVal FileNameString)
     On Error Resume Next
     Dim ObjStream,ImageData, OString
     ImageData = GetRemoteData(Trim(URLString))
	 If SRI_Error <> 0 Then Exit Sub
     OString = "ADODB." & "Stream"
     Set ObjStream = Server.CreateObject(OString)
     ObjStream.Type =1
     ObjStream.Open
     ObjStream.write ImageData
     ObjStream.SaveToFile Server.Mappath(FileNameString),2
	 If Err Then
	    Err.Clear
		SRI_Error = 2
	 End If
     ObjStream.Close()
     Set ObjStream = Nothing
  End Sub
  
  Private Function GetRemoteData(url)
     On Error Resume Next
     Dim Http, OString
     OString = "MSXML2.XMLHTTP"
     Set Http = Server.CreateObject(OString)
     Http.Open "GET",url,False
     Http.send()
     If Http.readystate<>4 Then	    
        SRI_Error = 1
		Exit Function
     Else
	    SRI_Error = 0
	 End If
	 If Http.status<>200 Then
	    SRI_Error = 1
		Exit Function
	 Else
	    SRI_Error = 0
	 End If
     GetRemoteData = Http.responseBody
     Set Http = Nothing
     If Err.Number<>0 Then 
	    SRI_Error = 1
		Err.Clear 
	 End If
  End Function
  
  Private Sub CreateFolder(ByVal StrPath, ByVal NewFolder)
     Dim FSO
     Set FSO = Server.CreateObject(Object_FSO)   
     IF NOT FSO.FolderExists(StrPath & NewFolder) Then
        FSO.CreateFolder(StrPath & NewFolder)
     End If
	 Set FSO = Nothing
  End Sub
  
  Private Function GetRndNumber()
	 Dim RndN, DtNow
	 Randomize
	 DtNow = Now()
	 RndN=int(9999*rnd)+1000
	 GetRndNumber = year(DtNow) & right("0" & month(DtNow),2) & right("0" & day(DtNow),2) & right("0" & hour(DtNow),2) & right("0" & minute(DtNow),2) & right("0" & second(DtNow),2) & RndN
  End Function
  
End Class

%>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -