如何构建Kentico媒体选择器以在与Azure存储集成时返回媒体文件GUID



我们有一个与Azure blob存储集成的媒体库的Kentico 9实例。这意味着Kentico的默认媒体选择器表单控件返回Azure blob的绝对URL。但是,除了URL之外,我还需要访问媒体文件信息对象本身以获得其他属性(例如文件宽度)。

在过去使用Kentico自己的文件存储时,我已经能够构建一个自定义媒体选择器并从返回的URL中提取媒体文件GUID。但是,当与Azure存储集成时,这是不可能的。有没有人有任何想法,我如何可能得到文件ID或GUID没有构建自己的媒体选择器从零开始?

如何使用自定义表单控件与UniSelector控件,您将传递所有文件从您的azure媒体库?

您可以使用如下命令获取文件:

        var mediaLibrary = MediaLibraryInfoProvider.GetMediaLibraryInfo("MyAzureLibrary", "SiteName");
        var mediaFiles = MediaFileInfoProvider.GetMediaFiles()
            .Columns("FileName", "FilePath", "FileGUID")
            .WhereEquals("FileLibraryID", mediaLibrary.LibraryID);

这样你可以得到"nice"对话框,它会列出特定文件夹中的所有文件,你可以设置UniSelector来存储这些文件的GUIDS而不是它们的路径。

这样做的缺点是你不能像在Media library中那样得到漂亮的树状视图。一旦有了文件的GUID,就可以重建完整的绝对URL。

如果你想要树形视图,你可以使用CMSTreeView控件,但它更复杂,你可能需要把它放在一个模态窗口中,这样它就不会被其他内容溢出。修改内置的MediaSelector表单控件实际上是不可能的,因为它位于源代码之下。

尝试启用以下设置:

Content -> Media -> Security ->检查文件权限

在这种情况下,插入的媒体URL应该保持为永久URL(因为媒体处理程序需要检查权限),并且您应该能够像以前一样从URL中提取GUID。

最新更新