2011-12-24 19 views
-2

可能重複:
Unique key generation如何使文件的名稱在這種方式31f3207.jpeg

如何使全自動文件的一個新的名字,當你把它上傳到服務器?

我用< input type =「file」/>上傳一個圖片文件。文件具有名稱picture_1.jpg。但我想將它存儲在文件系統中,名稱如下ec0b4c5173809b6aa534631f3207.jpg?如何創建這樣的新名字?是否有一些特殊的腳本/發生器用於製作這樣的名字?

例如圖片在FB:http:// a3.sphotos.ak.fbcdn.net/hphotos-ak-snc6/190074_10150167009837952_8062627951_8311631_4439729_n.jpg.

它的名稱是190074_10150167009837952_8062627951_8311631_4439729_n.jpg。但原來的名字肯定是不同的。所以我想以相同的方式更改上傳文件的名稱。這怎麼可能?

+0

你提的問題是非常不具體。提供額外的信息並重新修改您的問題會有所幫助,例如:「我想要執行XYZ並跟蹤上傳的文件,但我不知道如何執行,因爲如果我上傳一個給定名稱的文件,當我將XYZ用作CMS/WebFramework時,我提供了一個簡短的日誌/轉錄如下:...「 – 2011-12-24 22:57:29

回答

1

在PHP中如果你想要一個超長的或貌似我用uniqid()命名,我從上傳

存儲文件更隨機的ID,你可以用sha1()md5() uniqid來創建一個哈希。

你當然也可以使用這兩種方法來創建文件名的散列。

例如,下面的代碼可用於爲文件

$file = 'somefile.jpg'; 
$new_name = uniqid(); 
$new_name .= '.'.pathinfo($file,PATHINFO_EXTENSION); 
0

您可以使用MD5名稱來創建不帶空格或點的字符串:md5($filename)(http://php.net/md5)雖然我不確定那是您要求的嗎?

編輯:您還可以使用uniqid()(http://php.net/manual/en/function.uniqid.php)

+1

在某些情況下,這將是一個很好的方法;但是,如果兩個圖像具有相同的本地文件名(例如,由不同的用戶上傳),這將是有問題的。我認爲OP正在尋找一種功能來在服務器上創建獨特的文件名,而不管它們的原始本地文件名。 – 2011-12-24 22:58:27

+0

如果用戶上傳名爲me.jpg的圖片,而另一個圖片上傳了另一張同名的圖片,會發生什麼情況?當然可以使用md5,但不是那樣。 – Bakudan 2011-12-24 22:59:46

+0

我不確定他是否想要一種創建「安全」文件名的方法或者生成唯一文件名的方法,因此我編輯的答覆。如果你使用'md5()',你顯然需要確保它們沒有被使用。 – powerbuoy 2011-12-24 23:02:50

-1

看起來像一個GUID。

如果你是一個ASP.NET程序員,使用這樣的:

string filename = new Guid().ToString() + ".jpg"; 
+0

問題標記爲PHP – 2011-12-24 22:57:04

0

你只是在從臨時文件移動到服務器上重寫文件的名稱生成一個新的名字,位置你想把它移到。

move_uploaded_file($_FILES['userfile']['tmp_name'], $filePN) 

哪裏& filePN是你要移動的文件的路徑和名稱。

但是,您正在討論的特殊腳本可能是從輸入名稱的MD5散列到增加的數字以防止覆蓋的衆多事情。

1

你沒有提到你正在使用什麼編程語言。

在PHP中,可以在陣列$_FILES上找到隱祕名稱和原始文件名。

讓我們假設你的表單元素的名稱是userfile的,你可以從basename($_FILES['userfile']['name'])

訪問得到basename($_FILES['userfile']['tmp_name'])那個神祕的名字和原來的名字這裏瞭解更多信息: http://www.php.net/manual/en/features.file-upload.post-method.php