2010-03-29 36 views
1

我有一個我用Perl編寫的CGI程序。其功能之一是將圖片上傳到服務器。如何使用Perl CGI腳本上傳文件位置到數據庫?

所有這些都運行良好,包括將各種信息添加到MySQL數據庫。我的問題是:如何獲取上傳的圖片文件位置和名稱添加到數據庫?

我寧願不要改變腳本來實際上傳圖片到數據庫。我聽說過將二進制文件上傳到數據庫的恐怖故事。

因爲我對這一切都很陌生,所以我很茫然。已經嘗試了一些研究和網絡搜索3周,現在沒有運氣。任何建議或答案將不勝感激。我真的很討厭必須手動將所有位置/名稱添加到數據庫。

我正在使用:一個Perl CGI腳本,MySQL數據庫,Linux服務器和文件正在上傳到服務器。我不想將實際的文件添加到數據庫。只是他們的位置。

+3

如果您編寫了CGI腳本,那麼您知道該腳本如何確定放置文件的位置以及如何命名它們。什麼阻止你將該信息添加到數據庫? – 2010-03-29 15:23:41

+1

您是否正在研究如何放置一張表來存儲這些數據?或者你已經有了一個表格,並且需要一種方法來插入數據?或者你是否正在尋找一種將文件存儲在磁盤上的好方法,同時也可以將它們保存在網站上? – 2010-03-29 16:26:25

回答

1

這聽起來像你有你的方法完成你上傳的地方,把它做成一個字符串,並把它扔到mysql類似於讀取文件的字符串。但是,由於您給出了一個文件句柄,而CGI可以讀取一個文件名。你想知道該文件實際在哪裏。

如果您使用CGI.pm,upload,uploadInfo,param進行上傳以及上傳私人文件將幫助您處理上傳文件的來源。在遠程客戶端和CGI完成之後它們被隱藏起來的地方通常不是永久性的,並且最小值是不穩定的。

0

你有一堆上傳的文件需要添加到數據庫?應該輕而易舉地推出一次性腳本來遍歷所有文件並將詳細信息插入到數據庫中。如果他們都在一個地方,那麼一個簡單的opendir()/ readdir()類型的循環會捕獲它們,否則你可以創建一個文件路徑列表來循環和循環。

如果你談論的服務器記錄新上傳的,那麼這將是沿着這些路線的東西:

  1. 用戶上傳文件到服務器
  2. 腳本提取任何想從文件/需要的信息(名稱,大小,MIME類型,校驗等)
  3. 啓動數據庫事務
  4. 插入文件信息到數據庫
  5. 檢索新紀錄
  6. 的ID
  7. 移動上傳文件到最後的歸宿,使用ID作爲其文件名
  8. ,如果一切順利的文件,提交事務

使用ID作爲文件名來解決文件名衝突的憂慮和新上傳覆蓋以前的那些。如果您將上傳內容存儲在網站的根目錄之外,則只能通過腳本訪問這些文件,從而使您可以完全控制下載。