防止新闻系统里产生垃圾图片的方法
2008-02-23 09:26:36来源:互联网 阅读 ()
我的方法流程是这样的:当文章的添加者登录到系统里面后,由系统给它创建一个临时的工作文件夹,如“editor”这个用户的ID是5那我建立一个temp5的临时工作目录,当他添加文章的时候,上传的图片和其它附件并不存入到真正要显示存放的目录,而是存在这个临时的工作目录里面。同时为了方便管理,我建议给每一条新闻建一个目录来存放这些图片,当文章提交的时候,由系统分析里面的图片地址,把文章里面有的图片转移到这些对应的目录里面去。
当新闻或文章改动的时候,就先把这个文件夹下面的所有图片转移到进入的时候的临时工作目录里面,同时对文章里面的图片路径进行替换,保存的时候也是和添加的时候执行同一个过程。当文章删除的时候,也相对应地把这个目录删掉,这就可以保证了在添加、修改、删除的过程中没有垃圾图片的产生。当用户登出的时候,系统可以将其所对应的工作目录删除,这样就可以彻底地作到没有垃圾的产生。
看到上面这些文字描述也许好多人要头晕了,那看一下具体的实现过程吧(因为我对ASP比较熟悉,所以我用ASP来实现它了,用其它的平台也是可以实现的)。首先让我先引入我自己写的一个类,用来分析和转移图片的,详细的说明请看我的另一篇文章:用asp自动解析网页中的图片地址,并将其保存到本地服务器(http://www.csdn.net/develop/read_article.asp?id=15585)
class blacksmith
'The Class "blacksmith" is Created by Linzhang Chen
'It could use for copy images form other server which contain in the web
dim size,baseurl,basefilename,tofolder,servername,processstr,firstoldimg,firstnewimg
public Function saveimage(from, tofile)
Dim geturl, objStream, imgs,s
If size = "" Then
size = 0
End If
geturl = Trim(from)
imgs = getHTTPPage(geturl)
s = size * 512
If Len(imgs) > s Then
Set objStream = CreateObject("ADODB.Stream")
objStream.Type = 1
objStream.Open
objStream.Write imgs
objStream.SaveToFile tofile, 2
objStream.Close
Set objStream = Nothing
saveimage = True
Else
saveimage = False
End If
End Function
private Function getHTTPPage(url)
On Error Resume Next
Dim http
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "GET", url, False
http.send
If http.readyState <> 4 Then
Exit Function
End If
getHTTPPage = http.responseBody
Set http = Nothing
If Err.Number <> 0 Then Err.Clear
End Function
private Function getimgs(str)
getimgs = ""
Set objRegExp1 = New RegExp
objRegExp1.IgnoreCase = True
objRegExp1.Global = True
objRegExp1.Pattern = "http://. ?"""
Set mm = objRegExp1.Execute(str)
For Each Match1 In mm
getimgs = getimgs & "||" & Left(Match1.Value, Len(Match1.Value) - 1)
Next
End Function
Function str2img()
Dim servername, objRegExp, strs, Matches, RetStr, arrimg, newimg, i, fname, states, arrnew, arrall
if baseurl<>"" then
If Right(baseurl, 1) <> "/" Then
baseurl = baseurl & "/"
End If
end if
if right(tofolder,1)<>"\" then
tofolder=tofolder&"\"
end if
Set objRegExp = New RegExp
objRegExp.IgnoreCase = True
objRegExp.Global = True
objRegExp.Pattern = ""
strs = Trim(processstr)
Set Matches = objRegExp.Execute(strs)
For Each Match In Matches
RetStr = RetStr & getimgs(Match.Value)
Next
arrimg = Split(RetStr, "||")
allimg = ""
newimg = ""
For i = 1 To UBound(arrimg)
If arrimg(i) <> "" And InStr(allimg, arrimg(i)) < 1 Then
fname1 = baseurl & CStr(basefilename & i & Mid(arrimg(i), InStrRev(arrimg(i), ".")))
fname = tofolder & CStr(basefilename & i & Mid(arrimg(i), InStrRev(arrimg(i), ".")))
states = saveimage(arrimg(i), fname)
If states = True Then
allimg = allimg & "||" & arrimg(i)
newimg = newimg & "||" & fname1
End If
End If
Next
arrnew = Split(newimg, "||")
arrall = Split(allimg, "||")
For i = 1 To UBound(arrnew)
if i=1 then
firstoldimg=arrall(1)
firstnewimg=arrnew(1)
end if
strs = Replace(strs, arrall(i), arrnew(i))
Next
str2img = strs
End Function
end class
第一步用户登录的时候:由于有一个工作区,所以最好不要让多个用户用同一个帐号不然到时候有人登出的时候,将会造成其它人的工作丢失,这里最主要处理的是帐户登录的时候要对这个帐号锁定不允许重复登录(主要由FSO和数据库来实现,我就不多说了)。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:在静态页面中显示文章被阅读的次数
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash