成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

當(dāng)前位置:首頁>>軟件教程>>新聞內(nèi)容  
防止新聞系統(tǒng)里產(chǎn)生垃圾圖片的方法
作者:chinahuman 發(fā)布時間:2003-11-13 16:08:43 | 【字體:

  現(xiàn)在的新聞系統(tǒng)里越多地支持在線上傳插入圖片,以實(shí)現(xiàn)在比較好的效果。可是問題也隨之而來了,有的圖片傳上去后,發(fā)現(xiàn)這個圖片不對,那只能在編輯器里把它刪掉,或是,在添加地程中系統(tǒng)出現(xiàn)問題,而導(dǎo)致垃圾圖片的產(chǎn)生。為了防止在這過程中出現(xiàn)垃圾圖片和附件,許多人多研究了不少的方法,如動網(wǎng)論壇里,對上傳的每一個文件,在數(shù)據(jù)庫里都有相應(yīng)的一個記錄,這樣要占用一個表來存放,并且如果在添加數(shù)據(jù)到數(shù)據(jù)庫里時系統(tǒng)出現(xiàn)異常,也同樣無法避免這些垃圾的產(chǎn)生。經(jīng)過我的一些實(shí)踐,研究出我的方法,現(xiàn)在貢獻(xiàn)出來,供大家斧正。

我的方法流程是這樣的:當(dāng)文章的添加者登錄到系統(tǒng)里面后,由系統(tǒng)給它創(chuàng)建一個臨時的工作文件夾,如“editor”這個用戶的ID是5那我建立一個temp5的臨時工作目錄,當(dāng)他添加文章的時候,上傳的圖片和其它附件并不存入到真正要顯示存放的目錄,而是存在這個臨時的工作目錄里面。同時為了方便管理,我建議給每一條新聞建一個目錄來存放這些圖片,當(dāng)文章提交的時候,由系統(tǒng)分析里面的圖片地址,把文章里面有的圖片轉(zhuǎn)移到這些對應(yīng)的目錄里面去。

  當(dāng)新聞或文章改動的時候,就先把這個文件夾下面的所有圖片轉(zhuǎn)移到進(jìn)入的時候的臨時工作目錄里面,同時對文章里面的圖片路徑進(jìn)行替換,保存的時候也是和添加的時候執(zhí)行同一個過程。當(dāng)文章刪除的時候,也相對應(yīng)地把這個目錄刪掉,這就可以保證了在添加、修改、刪除的過程中沒有垃圾圖片的產(chǎn)生。當(dāng)用戶登出的時候,系統(tǒng)可以將其所對應(yīng)的工作目錄刪除,這樣就可以徹底地作到?jīng)]有垃圾的產(chǎn)生。

  看到上面這些文字描述也許好多人要頭暈了,那看一下具體的實(shí)現(xiàn)過程吧(因?yàn)槲覍SP比較熟悉,所以我用ASP來實(shí)現(xiàn)它了,用其它的平臺也是可以實(shí)現(xiàn)的)。首先讓我先引入我自己寫的一個類,用來分析和轉(zhuǎn)移圖片的,詳細(xì)的說明請看我的另一篇文章:用asp自動解析網(wǎng)頁中的圖片地址,并將其保存到本地服務(wù)器( http://m.wsalc.com/InfoShow.asp?id=214 )

   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

  第一步用戶登錄的時候:由于有一個工作區(qū),所以最好不要讓多個用戶用同一個帳號不然到時候有人登出的時候,將會造成其它人的工作丟失,這里最主要處理的是帳戶登錄的時候要對這個帳號鎖定不允許重復(fù)登錄(主要由FSO和數(shù)據(jù)庫來實(shí)現(xiàn),我就不多說了)。

  在處理文件上傳的時候,可以用稻香老農(nóng)的無組件上傳,把圖片傳到工作區(qū)中。并且把圖片代碼返回到編輯器中,當(dāng)提交以后,將由以下代碼來處理這些圖片,我這里是根據(jù)新聞或文章的ID來創(chuàng)建文件夾的:
  sql="select top 1 form news where id is null"
  set rs=server.createobject("adodb.recordset")
  rs.open sql,conn,1,3
  rs.addnew
  rs("userid")=session("myid")'因?yàn)槭切录拥模韵燃由弦粭l來取得ID
  rs.update
  newID=rs("newsid")'大部分情況下,這樣可以取得ID的,可是為了保險(xiǎn)起見,所以最好還是再判斷一下了
  rs.close
  set rs=nothing
  if newsID="" then
  set rs=conn.execute("select top 1 newsid from news where userid=" & session("myid") & " order by newsid desc")
  newsID=rs("newsid")
  end if
  
  basefoder=server.mappath("photo")'假設(shè)圖片存到當(dāng)前目錄下面的photo里面
  set fso=Server.CreateObject("Scripting.FileSystemObject")
  FiLePaTh = basefoder&"/"&newsID
  Fso.Createfolder(FiLePaTh)
  '假設(shè)將取得新聞的內(nèi)容存在變量content里面下面就調(diào)用我的那個類blacksmith來處理分析文章的內(nèi)容,處理圖片的轉(zhuǎn)移了
  set bs=new blacksmith
  bs.size=1
  bs.baseurl="photo/"&newsID'給圖片加上目錄的地址
  bs.basefilename="mynews"'給圖片加上前綴
  bs.servername = ""
  bs.tofolder=FiLePaTh
  bs.processstr=content
  content=bs.str2img
  set bs=nothing
  '接下來就是新聞內(nèi)容的保存的過程了,我這里就省去了,和其它的系統(tǒng)應(yīng)該是一樣的了

  在處理新聞的修改的時候用:
  '創(chuàng)建工作目錄
  set fso=Server.CreateObject("Scripting.FileSystemObject")
  FiLePaTh = server.mappath("temp"&session("myid"))
  If Not FSO.FolderExists(FiLePaTh) Then
  Fso.Createfolder(FiLePaTh)
  End If
  
  FiLePaTh = basefoder&"/"&newsID
  If FSO.FolderExists(fp) Then
  on error resume next
  fso.copyfile fp&"\*.*",FiLePaTh&"\"'把那個目錄下面的所有文件全拷到工作目錄下面,防止出現(xiàn)修改了不保存,所以先不刪除原有的內(nèi)容
  if err.num>0 then err.clear
  End If
set fso=nothing
  end if
  '把原有的文件內(nèi)容進(jìn)行處理,改變里面的圖片路徑,比如說這此內(nèi)容還是保存在content里面
content=replace(trim(content,"photo/"&newsID&"/mynews","temp"&session("myid")&"/mynews")'這個只是一個比較簡單的替換,相信由此引起誤替換的機(jī)會應(yīng)該是相當(dāng)小的了
  保存的過程和添加的過程是一樣的,所不同的是,要先把原來的那個目錄里面的文件清空,我這里就不多說了。
  新聞刪除的時候,要記著把這個ID相對應(yīng)的文件夾刪除了,在用戶登出的時候,也要把它的工作目錄清空。
  好了,我的整個思路就是這樣的了,說不上是什么精品,但是它在實(shí)際的應(yīng)用中,一年下來并沒有產(chǎn)生過任何的意常,所以我就把它貼出來了,歡迎大家和我交流: E_mail:clzwin@sina.com


文章來源:CSDN
 放生
 愚愛
 夠愛
 觸電
 白狐
 葬愛
 光榮
 畫心
 火花
 稻香
 小酒窩
 下雨天
 右手邊
 安靜了
 魔杰座
 你不像她
 邊做邊愛
 擦肩而過
 我的答鈴
 懷念過去
 等一分鐘
 放手去愛
 冰河時代
 你的承諾
 自由飛翔
 原諒我一次
 吻的太逼真
 左眼皮跳跳
 做你的愛人
 一定要愛你
 飛向別人的床
 愛上別人的人
 感動天感動地
 心在跳情在燒
 玫瑰花的葬禮
 有沒有人告訴你
 即使知道要見面
 愛上你是一個錯
 最后一次的溫柔
 愛上你是我的錯
 怎么會狠心傷害我
 不是因?yàn)榧拍畔?/a>
 親愛的那不是愛情
 難道愛一個人有錯
 寂寞的時候說愛我
主站蜘蛛池模板: 凤城市| 昆山市| 会同县| 嘉禾县| 汾西县| 广灵县| 广州市| 米林县| 古交市| 电白县| 理塘县| 内江市| 鹤庆县| 乌拉特中旗| 尤溪县| 永顺县| 连云港市| 惠安县| 马龙县| 休宁县| 镇原县| 民县| 永靖县| 鄂伦春自治旗| 泰州市| 冕宁县| 陵水| 呼玛县| 贵溪市| 九龙县| 兴仁县| 西畴县| 蒙自县| 尉犁县| 信丰县| 万山特区| 淮安市| 建始县| 铁岭市| 清远市| 射洪县|