2016-10-19 30 views
1

無論何時我們將媒體文件上傳到我們的Umbraco CMS,它都會在文件名中生成唯一的媒體ID。因此,像example.jpg一個文件將被賦予像網址:是否可以在Umbraco中使用靜態網址上傳媒體?

http://content.example.com/media/947/example.jpg 

如果我們更新文件,它得到一個新的介質ID。

這是令人難以置信的煩人,因爲沒有辦法爲圖像創建固定鏈接!我們希望能夠創建非技術人員上傳的圖像文件的鏈接,但是在網址中隨機且可能更改的ID意味着任何此類鏈接都有可能在沒有警告的情況下突破。

那麼,有什麼方法可以將媒體文件上傳到Umbraco,並將它們放置在靜態的位置?

回答

1

首先,我們需要考慮:是我們想用的嗎?如果它將在當前開發的網站內部使用,並且需要管理,我看不到任何爲什麼當前網址約定或媒體可能被視爲阻擋/屏障的任何原因。它只是要求編輯者在文檔類型屬性中選擇媒體(以適當的方式,例如使用MediaPicker,MultiNodeTreePicker等),並且在處理和呈現時,我們可以輕鬆獲取具有媒體ID的文件的URL並將其放置在HTML中的任何位置標記。吧!在我看來,這更好,因爲當我們刪除或重新上傳文件時,我們不需要更改代碼或標記或邏輯內的任何其他內容,導致媒體文件的ID不會改變,我們仍然能夠使用它。

我不知道是否有任何CMS使用戶能夠負責創建媒體文件的URL ......但如果這是一種情況,基本上,有一種方法(或甚至超過一種)來實現這一點:

  1. 「哈克的方式」 - 「文件」的文檔類型和模板將數據返回

您可以MediaPicker它的內部屬性創建新的文檔類型。然後使用C#/ Razor邏輯創建和分配模板(具體取決於您是否想要例如劫持具有自定義控制器的路由,或者只是在模板內渲染或返回文件),並以您期望的方式返回文件數據。如果你想顯示圖像 - 你可以渲染它,如果你想播放音頻或視頻 - 你可以返回適當的對象/ html5標籤或其他任何東西。它可能是一個很長的switch語句,涵蓋了所有允許的文件類型以及將它們返回給用戶的方法。您還可以處理該文件並將其返回到HttpResponse中,以強制瀏覽器發送文件和用戶將文件下載到他的磁盤。棘手的一個。

  • 「一把umbraco先進開發方法」 - 自定義FileSystemProvider
  • 我們可以創建自定義FileSystemProvider並將其分配給在MediaFileSystem使用。它可以替換整個媒體檢索和處理媒體的工作流程。說實話,我並沒有太多玩這個遊戲,但是有一個媒體提供商的開放源代碼項目,它在Azure Blob上存儲媒體(https://our.umbraco.org/projects/collaboration/umbracofilesystemprovidersazure/),所以我們可以預覽它是如何在那裏完成的並採用我們自己的場景。

    有關定製FileSystemProvider的更多信息:https://our.umbraco.org/documentation/extending/custom-file-systems

  • 「不推薦的方式」 - MediaService中複製自定義目錄中的文件保存事件
  • 這是從上面在我看來,最糟糕的解決方案,因爲它消除Umbraco爲我們管理和處理媒體文件(例如ImageCropper)提供的所有優秀功能,但是......我們可以連接到MediaService事件(https://our.umbraco.org/documentation/reference/events/mediaservice-events),並通過文件(s )上傳到我們的網站。這意味着我們也能夠複製文件並將它們放置到我們的自定義目錄中,這需要採用並調整爲可見並且「從外部」使用。所以,正如你所看到的 - 一切都是可能的:)但是,回到這篇長文章的開始 - 我們需要考慮我們想要使用它的方式,以及我們是否真的需要它。我仍然無法找到任何需要炫酷,真棒,自定義媒體文件ID的用例。如果我需要它們,我會使用任何網址縮寫,例如bit.ly,爲競選或任何其他什麼也會給我一個很好的分析工具,例如提供有關下載數量的數據。

    +0

    我們媒體ID的主要問題是,沒有辦法事先知道它。所以假設我們要求我們的設計師上傳100個特定的文件給Umbraco。每個命名約定都遵循一個命名約定,例如'example_ {type} _ {kind} .jpg',其中'type'從1運行到25,'kind'從1運行到4(因此總數爲100)。在*外部應用程序*我們需要鏈接到這些文件。但不能鏈接到像'/ media/example_13_3.jpg'這樣的已知網址的文件,我們必須得到Umbraco生成的100個隨機媒體ID列表,並且永遠與這些隨機數保持同步。這是一場噩夢。 –

    +0

    我可能會使用FTP來處理這種情況,而不是CMS,但它可能是一個選項,將文件夾中的這些項目進行分組,然後映射/選擇文件夾中的項目或頁面以顯示它們,然後通過分配的文件夾的內容。肯定需要知道更大的圖片,但始終有一種方法! :) –

    +0

    @MarcinZajkowski爲「Hacky Way」,你從哪裏瞭解到這個?是否有聯機文檔顯示此操作,以便開發人員可以嘗試模仿它們的方案?我需要看看這意味着什麼。預先感謝任何來源。 – blackhawk

    相關問題