2014-10-09 56 views
0

我有一個運行在Azure上的Angular SPA應用程序,我想實現類似於Medium.com的富文本編輯器。我會爲此使用一些現有的編輯器,但是我遇到了圖像文件的問題。處理服務器擱淺的文件上傳

,我想我的編輯不得不裏面也添加內容圖像的能力的問題。我遇到的問題是什麼時候應該將圖像上傳到服務器

可能的解決方法1:他們選擇後立即上傳

  • 保存內容的速度更快,因爲所有的圖像都可能已經上傳
  • 文件會顯示他們上傳之後從服務器URL

  • 文件可以在服務器上刪除,如果用戶選擇取消編輯
  • 文件可能會在服務器上擱淺,如果用戶直接關閉瀏覽器窗口

可能的解決方法2:上傳後保存

  • 文件開始使用FileAPI能力立即顯示
  • 個無滯留服務器端文件,如果編輯在被丟棄任何方式

所有圖像需要在保存內容

  • 額外的時刻要上傳的壞

    • 減排內容可能需要較長時間客戶端從本地文件

    問題

    我顯示圖像想要實施解決方案1 ​​,因爲它提供了更透明的用戶界面流程,並且可以更快速地編輯save =>更好的用戶體驗。但我應該如何管理擱淺的文件?我可以使用工作進程不時刪除擱淺的文件,但我想知道這是否是這種情況下的最佳方法。

    你會建議我如何實現這個?

  • 回答

    1

    這是非常主觀的(基於意見),但我會給它一個鏡頭。

    你實際上遇到了比你想象的更大的問題。在你抽象的方法中,你只能描述用戶開始一些新事物時的情況。而如果用戶正在編輯現有項目,則更難解決問題。如果他/她刪除圖像,添加新圖像並在最後點擊CANCEL,會發生什麼情況。另外,如果在創建/編輯時互聯網連接斷開?

    我也會去解決方案一。當然,儘量減少「壞」的東西,因爲它們並不那麼難處理。這是我如何能解決一切「壞」 S在方法一:

    • 我所有的文章(或任何用戶使用編輯器中編輯)將有一個布爾標誌「IsDraft」或這樣的事情。然後我所有的前端業務邏輯將只會尋找IsDraft == False的項目。
    • 每當用戶啓動一個新的文章(最容易解決的問題),我立即在我的數據庫中創建新的項目與IsDraft=True
    • 有一個鏈接表來創建項目的ID和正在使用的圖像文件之間的鏈接(斑點)。這裏的要點是,如果您不保留已使用和未使用的斑點之間的鏈接,您將很難決定刪除哪個斑點以及要在存儲上保留哪個斑點。
    • 有一個工作進程(如worker process in Web Role,如果我使用雲服務,或者作爲Web Job(+ nice and short explanation here)是我使用網站)檢查草稿和大於XXX天的文章。如果找到 - 刪除文件+文章本身。

    處理現有項目的編輯是更具挑戰性 - 對於這一點,我可能會採取的做法:

    • 當用戶點擊編輯,創建整篇文章的新副本,並將其標記爲草稿
    • 如果用戶點擊保存 - 將新文章(新版本)的內容與現有文章切換,將新文章標記爲IsDraft - 工作進程將清理它。
    • 如果用戶由於某種原因未能點擊保存(點擊取消,網絡丟失或計算機重新啓動或瀏覽器崩潰或or或..) - 新文章將在稍後由工作進程清除

    如果您想更深入,更瘋狂,可以在管理面板中爲您的用戶展示草稿,以便他們可以繼續工作,或者讓其自動清理。

    +0

    這實際上是一種非常好的做事方式。我已經計劃實施草案(用戶可以稍後返回)。但想到**編輯**。您建議的是,我應該在用戶啓動編輯時創建現有內容的草稿副本?那很棒。但Azure blob(圖像)呢?它們也應該重複或至少與帖子相關。基本上我有一個'Content'表,圖像在Content.Body中表示爲內容項。我應該有一張表格「ContentImages」,正式與他們聯繫。不需要重複文件。你怎麼看? – 2014-11-11 12:44:28