asp保存文章内容中的远程图片到本地asp
以下是一个ASP保存文章内容中的远程图片到本地的示例代码。代码中首先从数据库中读取文章内容,然后使用正则表达式和文件流处理每个远程图片,将其保存到本地,并替换文章内容中的图片链接为本地路径。
<%
'连接数据库并读取文章内容
Dim conn, rs, sql
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\path\to\database.mdb;"
sql = "SELECT * FROM articles WHERE id=1;"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open sql, conn
If Not rs.EOF Then
'获取文章内容
Dim content
content = rs("content")
'正则表达式匹配图片链接并保存图片到本地
Dim reg, matches, imgsrc, imgfile
Set reg = New RegExp
'使用下面的正则表达式,当图片文件名后面跟了带问号参数时下载失败
'reg.Pattern = "<img[^>]*src=['""]([^'""]+.(jpg|jpeg|png|gif|bmp))['""][^>]*>"
'使用下面的正则表达式,去掉文件名后面带问号的参数,下载成功
reg.Pattern = "<img[^>]*src=['""]([^'""]+\.(jpg|jpeg|png|gif|bmp))\?[^'""]*['""][^>]*>"
reg.Global = True
Set matches = reg.Execute(content)
For Each Match In matches
imgsrc = Match.Submatches(0)
imgfile = "C:\path\to\local\" & GetFileName(imgsrc) '保存到本地的文件名
DownloadFile imgsrc, imgfile '将远程图片保存到本地
content = Replace(content, imgsrc, imgfile) '将文章内容中的图片链接替换为本地路径
Next
'保存更新后的文章内容
rs("content") = content
rs.Update
End If
rs.Close
conn.Close
'获取URL中的文件名
Function GetFileName(url)
Dim fileparts
fileparts = Split(url, "/")
GetFileName = fileparts(UBound(fileparts))
End Function
'下载远程文件到本地
Sub DownloadFile(source, destination)
Dim oXMLHttp, oStream
Set oXMLHttp = Server.CreateObject("Microsoft.XMLHTTP")
Set oStream = Server.CreateObject("ADODB.Stream")
oXMLHttp.Open "GET", source, False
oXMLHttp.Send
If oXMLHttp.Status = 200 Then
oStream.Type = 1
oStream.Open
oStream.Write oXMLHttp.ResponseBody
oStream.SaveToFile destination, 2
oStream.Close
End If
Set oXMLHttp = Nothing
Set oStream = Nothing
End Sub
%>
上述代码中的数据库连接字符串和保存到本地的文件路径需要根据实际情况进行替换。另外,该示例代码只支持保存jpg、jpeg、png、gif和bmp格式的图片。如果要支持其他格式的图片,需要相应地修改正则表达式和DownloadFile函数中的判断逻辑。
我要评论