文件上傳之后
發表時間:2024-01-26 來源:明輝站整理相關軟件相關文章人氣:
[摘要]大家經常會利用上傳組件上傳文件嗎?你的空間是否足夠大,以至于可以不考慮冗余文件的處理?這里所說的冗余文件,是指用戶修改信息或誤操作后,不再與信息關聯的文件,久而久之,這些文件會占用相當大的空間。 以下情況可能產生冗余文件: 1.用戶修改了原信息。 用戶可能在修改信息的同時更換了上傳文件,而被更換的...
大家經常會利用上傳組件上傳文件嗎?你的空間是否足夠大,以至于可以不考慮冗余文件的處理?這里所說的冗余文件,是指用戶修改信息或誤操作后,不再與信息關聯的文件,久而久之,這些文件會占用相當大的空間。
以下情況可能產生冗余文件:
1.用戶修改了原信息。
用戶可能在修改信息的同時更換了上傳文件,而被更換的文件留在了服務器上;
2.用戶在發布信息過程中操作失誤,系統提示錯誤,用戶返回后,上傳了與原文件不同的文件,原文件留在了服務器上;
3.刪除信息時未將與其關聯的上傳文件同時刪除。
為了在以上幾種情況出現時,都將冗余文件處理掉,我采取了一些可能有些繁瑣的辦法,但是為了可憐的空間,繁瑣就繁瑣點吧。以下辦法僅限于利用文件上傳組件的操作,如果是將文件存在庫里,希望也能有所參考。
先從上傳說起
上傳文件可能采取兩種方式:
1.信息入庫與文件上傳同時操作;
2.先讓用戶上傳文件,然后信息入庫;
我以前采用過第一種方法,后來再做此類功能的時候放棄了。它雖然可以將上傳文件的相關信息,如文件個數,文件名等與信息同時寫入庫中,但是缺點也很明顯,比如處理中出錯的可能性大大增加;允許用戶上傳多個文件時需加入多個<input type=file>循環處理,一處有錯,全部重來;如果用戶對不同文件的顯示位置有要求,處理較困難等等。
采用第二種辦法,可以對每次上傳單獨控制,但是需要把上傳的信息如
點擊瀏覽該文件用javascript寫回<textarea>,顯示的時候用UBB處理。我對js的可靠性不放心,但是魚與熊掌不可兼得,舍魚而取熊掌也。
這里插一下對文件上傳個數的控制,有些同學把上傳個數寫入庫表,或用session,我感覺都不夠靈活,比如用戶修改時,如何使上傳文件個數相應變化呢?得費些功夫。我的辦法是判斷<textarea>中[upload]...[/upload]的個數,用戶如想修改,從<textarea>刪去欲修改的[upload]...[/upload],可再上傳直至允許的個數。
上傳時,文件名一般用上傳時間加隨機數替換,這樣做有兩個目的,一是保證文件不重名,二是避免文件名中的非法字符造成上傳的文件無法正確顯示。
但是我把每一篇“文章”中上傳的文件,放在單獨的一個文件夾中,文件夾的名字也用時間加隨機數生成,這樣做是為了刪除文件時便于操作----只要刪掉一個文件夾就OK了,試想從相對較少的文件夾找到要刪掉的文件夾,與從一大堆文件中找到要刪除的文件相比,還是要省些功夫的。
下面針對可能產生冗余文件的操作,介紹我的做法:
1.刪除文件時。
上面說過了,只要刪掉與信息關聯的文件夾就可以了。
但是這個文件夾要寫到庫表中的,我是這樣做的:在信息發布的表單中設一個<input type=hidden name=filepath>,當上傳第一個文件時,生成文件夾名,[upload]寫回<textarea>的同時,文件夾名寫回filepath,每次上傳前判斷這個控件中是否有值,如有,就不再生成文件夾名了。這樣修改信息時,也可以保證文件上傳到原來的文件夾。
2.修改信息時。
在用戶修改信息時,前面說過,只要刪掉<textarea>中的[upload],就可上傳其它文件,但是原先上傳的(也就是用戶刪掉的[upload]所標識的)那個文件留在了服務器上。這時候,我遍歷filepath下的所有文件(這也是建文件夾的目的之一),判斷每個文件是否在<textarea>中,如果不在,將其刪除。簡單的辦法是直接查找<textarea>的字串中是否包含從文件夾中取得的文件名,如果嫌不保險,也可以利用正則表達式,取得<textarea>中[upload][/upload]中間的文件名,與文件夾中物理存在的文件名比較。
3.信息發布時。
用戶在發布信息時,可能預覽后對上傳的文件不滿意,返回去修改,這時候的操作跟上面一樣,也就是說,在發布時也要比對filepath中的文件名與<textarea>中的文件名。這樣當然會影響發布的速度,為了節省空間,只好以時間換空間了。
還有一種情況:用戶上傳了文件后,沒有來得及發布,關掉了瀏覽器,轉到了其它頁面,或是出現其它意外,這時候會造成站點空間中存在一個與任何信息不關聯的文件夾。為了處理這種情況,我加了一個表,在生成文件夾名的同時,將其存入這個表,信息發布的同時,再把它從表中刪去。這樣,那些“孤立”的文件夾就會留在新加的這個表中,管理員可以每隔一段時間將表中的文件夾刪除,清理一下這些“孤立”的文件夾。
采用以上辦法,只需要在表中記錄下文件夾名,而不用另外記錄上傳的文件名(文件名存在于信息正文中)。
當然,還存在其它的情況,比如在修改時,用戶上傳了新文件,然后關閉了瀏覽器,這時候在上傳文件夾中會出現冗余文件。但是我以上的處理,已經使出現冗余文件的可能性大大減小了,如果您覺得有必要,可以進行更細致,同時也是更繁瑣的處理:)