2011-10-29 96 views
0

我使用CGI文件上傳到一個網站,我們的公司。在管理面板中,員工可以上傳圖像以對應於稍後以JSON格式存儲的特定對象。所有這些工作,但如果員工A上傳dog.png,然後員工B上傳dog.png。員工B的照片將覆蓋員工A的照片,兩者都會引用相同的照片。我想要得到一個哈希圖像並將其命名爲自己的哈希,問題是,在上傳之前閱讀文件有點粗略,瀏覽器支持(安全問題)並將其保存到服務器,獲取哈希,重新保存,然後刪除舊文件很慢並且被破解。生成一個隨機值,我的網站

我的問題

考慮到這一點,什麼是給每個文件的唯一名稱的最好方法?文件的名稱完全沒有關係,只要遵循保存約定(即沒有0​​或.)。我還必須能夠在文件上傳之前生成名稱。

什麼我目前使用

  • JQuery的
  • 的Javascript
  • CGI(蟒蛇)

回答

1

我有上傳圖片到我的網站的產品的類似系統。

每個產品都有自己的文件夾,這是在數據庫中的產品的ID,但是這是不是真的有關。

圖像被賜名爲他們在格式

itemID-TimeAsUnix.jpg 

能正常工作的,因爲沒有時間標記可以被簡單地重複上傳。如果兩個項目完全同時上傳到第二個項目,它會失敗,所以我猜這些單獨的文件夾可以幫助您。

如果上傳頻率很低,或者只是附加一個附加的隨機數,或者可能是用戶名或其他東西,那麼您可以取消文件夾?

+0

TimeAsUnix的想法工作得很好!我可能會使用它。我們每隔一段時間只添加/改變一次。我非常懷疑會發生任何衝突。好主意:D – FreeSnow

0

也許在JavaScript中創建一個GUID。然後,您將擁有上傳文件的唯一標識符。

從舊SO問題here

function S4() { 
    return (((1+Math.random())*0x10000)|0).toString(16).substring(1); 
} 
function guid() { 
    return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4()); 
} 
2

對於JavaScript中的客戶端生成隨機的名字:

Math.random().toString(16).replace(/\./, '') 

爲了做它在服務器上的PHP:

mt_rand() 
1

將圖片存儲在一個目錄下帶有員工ID的ectory,或者使用員工的ID作爲文件名的一部分。

我不明白你爲什麼要生成名稱之前它的上載,雖然,這不符合您的問題文本,因爲你不知道上傳的文件(「dog.png」的名字在你的例子中)直到它被上傳,所以沒有命名衝突的危險,除非你選擇了兩次相同的名字。

如果您正在生成之前上傳的文件名,使得服務器上的GUID,而完全忽略了什麼文件名其實是。