2011-12-13 48 views
0

不確定從哪裏開始在這一個和谷歌搜索一天沒有什麼幫助。顯示用戶上傳上傳到

我正在提交表單,我登錄的用戶可以在表單域中提交數據並附上一些文件。這些文件應該在許多提交內容中提供給用戶,以免重複文件阻塞我的數據庫,並且爲了用戶的方便,不必多次重新上傳文件。這些文件將主要是PDF和Word文檔。

我的問題是,什麼是最優雅的解決方案,以讓我的用戶選擇以前提交的文件其當前提交和以「重視」,或者多次提交該文件相關聯?一些顯示上次上傳的下拉框似乎是最好的,如果您同意任何代碼片段會超級有用。

我決定將文檔文件存儲爲自己的表中的斑點。我使用godaddy在Linux上運行php和MySQL。

感謝您提前尋找代碼示例的建議。只是一直無法找到我要找的東西。這裏需要JavaScript嗎?

+0

向他們顯示他們的文件列表,並帶有一個複選框以選擇他們是否要附加它。 – 2011-12-13 06:55:02

+0

你的用戶將如何知道他們應該選擇哪個文檔?試圖以這樣一種格式顯示「文檔」,用戶可以選擇一個格式爲「我會上傳這個文件,除非它已經存在」,這聽起來像是一場絕對的噩夢。我的意思是,如果你有10張照片,這是一回事,但Word文檔或PDF或什麼是瀏覽器中顯示的絕對_beast_,用戶將沒有工具來幫助他們確定他們的文件是否是_identical_ 。你確定這是要走的路嗎? – sarnold

+0

我們不是代碼示例的搜索代理,@Dev Newb。 –

回答

0

處理文件上傳的一種更好的方法是簡單地將文件名(應該生成爲唯一的)存儲在數據庫中,並將實際文件存儲在目錄中。這樣,你就不會有將它存儲在BLOB中的問題。你有什麼理由通過這種方法來做這件事嗎?

現在,如果你輸出,存儲在數據庫中的文件名列表的SELECT表單元素,用戶可以簡單地選擇一個和所有你需要做的是存儲的新行中的文件名。然後,所有指向該文件名的行都將指向同一個文件,而無需上傳。

如果你想允許多文件上傳或在這種情況下,「附件」,那麼你將需要在數據庫中創建一個一對多的關係。每個提交行將在另一個表中指向它的許多行,所有行都參考上載的相應文件。這樣任何提交都可以附加零個,一個,兩個或更多個文件。如果他們選擇已經存在的文件,那麼只需複製上面所述的用戶名即可。如果它是一個新文件,那麼你應該上傳該文件並將其名稱添加到數據庫中。

JavaScript不是必需的,但它會很好 - 爲表單添加交互性。如果你想允許用戶點擊說,「添加新文件」,並出現一個新的文件上傳表單元素。

+0

令人敬畏的建議。非常感謝,我讀了很多關於blob vs目錄存儲的內容,只是想到我必須選擇一個。雙方都有很多爭論。你是否總是用於目錄存儲,或者你認爲它適用於我在這裏要做的事情嗎? –

+0

我基本上反對在數據庫中存儲除文本以外的任何東西,而且我只會在非常罕見的情況下偏離該位置。我從來不需要參加我的任何項目,有一次我嘗試了它作爲測試,但實際上我遇到了問題。在這種情況下,它尤其有意義,因爲如果將文件存儲在數據庫中,則需要創建一個全新的表來存儲文件,而這隻會使IMO複雜化。 –

+0

很好的建議。不認爲添加另一個參考表是很重要的,我不願意回過頭來重新設計我的方法,但我想現在是時候在我太遠之前做到這一點。感謝您的反饋。 –

0

form開頭。添加一個select與該用戶關聯的文件列表。添加另一個允許文件上傳的表單元素。像其他所有東西一樣正常。

在頁面視圖上,用文件名填充select,並將該文件的行ID置於<option value="file_id_xxx">...中。

在您的服務器腳本中,檢測文件是否已上傳;如果是,請完成存儲文件的過程並將文件參考設置爲提交的關聯文件;如果沒有,請檢查是否從下拉列表中選擇了一個文件,如果是,請將select中的引用與之前上傳的文件一起保存爲提交。

JavaScript可能有助於禁用select或文件上傳input,視。但沒有必要。

+0

對不起。沒有尋找完整的代碼。只是一些指引,讓我去。你們提供了我需要的東西讓我開始。在短短几分鐘內?這個網站踢屁股! –