2011-01-20 75 views
1

我正在研究一個允許您寫入筆記的Web應用程序。我想添加一些功能以允許用戶將附件添加到筆記,但是我有一些小問題來弄清它背後的邏輯。如何將文件關聯到尚未保存的記錄

我希望它的工作有點像webmail或phpBB論壇帖子。你開始一個新的消息。有一個文件上傳輸入元素,旁邊有一個「添加」按鈕。當你添加一個文件時,它會被上傳,你可以繼續編寫你的消息。當你最終點擊「提交」時,它會創建註釋並將上傳的文件與它關聯起來。這裏有一些ASCII藝術:

Subject:  ______________ 

Message:  ______________ 
      ______________ 
      ______________ 

Attachments: some_file.txt 
      resume.odt 
      ______________ [Browse][Add] 

      [Save] 

但是,當它仍然被寫入時,我怎樣才能將上傳與筆記關聯?它還沒有保存。它沒有ID。通常情況下,我會添加一個數據庫表,將上傳的文件與筆記ID相關聯,但對於尚未保存的筆記無效。我擔心的是,當用戶開始寫新筆記時,向其中添加文件,然後改變主意,從不保存筆記(例如關閉瀏覽器)。我不希望那些上傳的文件徘徊。

在此先感謝!

+0

對於典型的表單提交,在提交表單之前不會進行文件上傳。 – horatio 2011-01-20 21:18:10

回答

1

有很多方法可以做到這一點。下面是我第一眼看到的一個: 當用戶點擊「新郵件」時生成「郵件ID」,然後當他想上傳某些內容時就已經擁有了。

一種更實驗的方式: 當他上傳文件時生成文件的散列(p.e.MD5帶有時間戳或類似的東西)。當他最終提交郵件時,將散列添加到郵件中,並將其用作上次上傳的關鍵字。

2

好的,所以他打開那個URL,他看到了你設計的佈局(ASCII藝術的榮譽)。在呈現頁面之前,您已經創建了一個空白記錄記錄,它將爲您提供ID。他上傳文件(在硬盤上的某個地方,並且只保存另一個數據庫表中的路徑,請記住文件註釋關係是多對一的),瞧!你已經有了一個ID與他們聯繫! 至於孤立文件與廢棄的筆記..好吧,有幾個選項來處理,但他們都結束了在你的Web應用程序中的另一個章節,稱爲'維護'。我會在用戶資料中保留最後一個筆記ID,並且不會讓他在不保存或丟棄前一個筆記的情況下創建新筆記。

1

回顧AJAX之前的日子,如果您想將文件附加到表單中,只需在表單提交時上傳文件即可。現在我們有各種聰明的方式來傳輸文件,或者至少有兩種或三種流行的方式,有些使用Flash或jQuery。但是,您已經發現了這些技術的主要維護問題:每當用戶並行上傳圖像以填寫表單時,不能保證表單將被提交。你必須爲這些上傳的文件提供某種超時機制,這通常意味着啓動某種內務過程。您可以在架構中添加另一個移動部分,並且需要定期監控它以確保事物不會失控。

根據流量的預期頻率和大小,您需要定義一些參數,以便何時可以刪除孤立文件。如果您預計每天的上傳次數少於100次,那麼每日清除應該沒問題。在每次清除時,您想要刪除任何一段時間內孤立的文件。爲此,您需要一種識別舊文件的機制,並且可以將文件與表格記錄進行比較,這需要額外的數據庫資源,這可能會影響網站的速度。這意味着你應該將這些文件移動到別的地方,這樣可以更容易地識別出潛在的孤兒。

現在,當您監控此過程時,您可以決定是否需要更頻繁地運行。如果你做出了糟糕的設計決定,那麼做家務將會更加痛苦,特別是如果它每小時或更頻繁地運行。

祝你好運!

相關問題