是否可以在Umbraco中上传带有静态网址的媒体?

时间:2016-10-19 17:11:21

标签: umbraco

每当我们将媒体文件上传到我们的Umbraco CMS时,它会在文件名中生成唯一的媒体ID。因此,example.jpg这样的文件会被赋予以下网址:

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

如果我们更新文件,它会获得一个新的媒体ID。

这令人非常恼火,因为没有办法永久保存图像!我们希望能够创建非技术人员上传的图像文件的链接,但在网址中随机且可能更改的ID意味着任何此类链接都有可能在没有警告的情况下破坏。

那么,有没有办法将媒体文件上传到Umbraco并将它们放在静态位置?

1 个答案:

答案 0 :(得分:1)

首先,我们需要考虑:我们想要使用它吗?如果它将在当前开发的网站内使用并且需要可管理,我看不出任何理由为什么当前的网址约定或任何其他媒体可能被视为阻止者/屏障。它只需要让编辑器在文档类型属性中选择媒体(以适当的方式,例如使用MediaPicker,MultiNodeTreePicker等),当它被处理和呈现时,我们可以轻松地获取具有媒体ID的文件的URL并将其放在HTML中的任何位置标记。吧!在我看来这更好,因为当我们删除或重新上传文件时,我们不需要更改代码或标记或逻辑中的任何其他内容,因为媒体文件的ID不会改变,我们仍然能够使用它。

我不知道是否有任何CMS使用户能够负责媒体文件的URL创建...但如果是这种情况,基本上,有一种方法(甚至不止一种)来实现这一点:

  1. “Hacky way” - “文件”文档类型和模板返回数据
  2. 您可以在其中创建包含 MediaPicker 属性的新文档类型。然后使用C#/ Razor逻辑创建和分配模板(具体取决于您是否要使用自定义控制器劫持路径或仅在模板内渲染或返回文件)并以您想要的方式返回文件数据。如果你想显示图像 - 你可以渲染它,如果你想播放音频或视频 - 你可以返回正确的对象/ html5标签或其他任何东西。它可能是一个很长的switch语句,涵盖了所有允许的文件类型以及将它们返回给用户的方法。您还可以处理该文件并在HttpResponse中返回它以强制浏览器发送文件和用户将文件下载到他的磁盘。棘手的。

    1. “Umbraco高级开发方式” - 自定义 FileSystemProvider
    2. 我们可以创建自定义 FileSystemProvider 并将其指定为在MediaFileSystem中使用。它可以交换检索和添加媒体的整个媒体工作流程。说实话,我并没有太多玩这个,但是有一个媒体提供商的开源项目,它将媒体存储在Azure Blob(https://our.umbraco.org/projects/collaboration/umbracofilesystemprovidersazure/)上,这样我们就可以预览它是如何在那里完成并采用我们自己的场景。

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

      1. “不推荐的方式” - 在MediaService保存事件期间复制自定义目录中的文件
      2. 在我看来,这是上述最糟糕的解决方案,因为它删除了Umbraco为管理和处理媒体文件(例如ImageCropper)提供的“开箱即用”的所有强大功能,但是......我们能够连接到MediaService事件(https://our.umbraco.org/documentation/reference/events/mediaservice-events),并对上传到我们网站的文件做任何我们想做的事情。这意味着我们还能够复制文件并将它们放置到我们的自定义目录中,该目录需要被采用并调整为可见并且“从外部”使用。

        所以,正如你所看到的 - 一切皆有可能:)但是,回到这篇长篇文章的开头 - 我们需要考虑我们想要使用它以及我们是否真的需要它。我仍然找不到任何需要酷,真棒,自定义媒体文件ID的用例。如果我需要它们,我将使用任何网址缩短器,例如bit.ly,对于活动或其他任何东西,也会给我一个很棒的分析工具,为我提供有关下载次数的数据。