在Kentico中创建MediaFileInfo对象时的ProviderException

时间:2016-04-20 07:21:58

标签: model-view-controller thumbnails kentico media-library

我想从Kentico 8.2的文件中获取缩略图,所以我使用如下方法:

private void ThumbnailTest()
{
    var siteInfo = SiteInfoProvider.GetSiteInfo(ConfigUtils.Tribes.SiteId);
    MediaLibraryInfo libraryInfo = MediaLibraryInfoProvider.GetMediaLibraryInfo(ConfigUtils.Tribes.MediaLibraryID);

    string filePath = string.Format(@"D:\\Kentico\{0}\{1}\Homepage\{2}", siteInfo.SiteName, libraryInfo.LibraryFolder, "top_banner_1.jpg");
    MediaFileInfo fileInfo = new MediaFileInfo(filePath, libraryInfo.LibraryID, libraryInfo.LibraryFolder); // <-- exception occurs here

    var thumbnail = MediaFileInfoProvider.GetImageThumbnail(fileInfo, ConfigUtils.Tribes.MediaLibraryPath, ConfigUtils.Tribes.SiteName);
}

但在创建MediaFileInfoObject时发生异常。

  

System.Configuration.Provider.ProviderException:仅限方法   如果用户名参数与中的用户名匹配,则受支持   当前的Windows身份。

我使用Kentico作为远程服务器'A'上的内容平台,我想从我的localhost获取MVC应用程序的缩略图。

为什么会出现这种异常以及我做错了什么?

感谢您的建议!

更新1:

MediaFileInfo对象搜索localhost上的目录,但不搜索远程服务器上的路径,并认为这是主要问题。

我的应用程序是单独的MVC网站,需要从其他域(服务器)获取图像的缩略图。

更新2:

private void ThumbnailTest()
{
    MediaLibraryInfo libraryInfo = MediaLibraryInfoProvider.GetMediaLibraryInfo(ConfigUtils.Tribes.MediaLibraryID);
    var mediaFileInfo = MediaFileInfoProvider.GetMediaFileInfo(libraryInfo.LibraryID, "Homepage/top_banner_1.jpg"); // success here, file found!
    var thumbnail = MediaFileInfoProvider.GetImageThumbnail(mediaFileInfo, ConfigUtils.Tribes.MediaLibraryPath, ConfigUtils.Tribes.SiteName, 300, 200, 500); // <-- null occurs here 
}

我很困惑,因为根据Kentico文档方法GetImageThumbnail:

  

从磁盘返回图像缩略图,否则创建一个新缩略图   还存在。

我不知道为什么缩略图为空。它应该至少创建新的缩略图。我现在应该使用@ user6043336提供的解决方案吗?

2 个答案:

答案 0 :(得分:2)

Imho你不应该像

那样创建新的MediaFileInfo
MediaFileInfo fileInfo = new MediaFileInfo(filePath, libraryInfo.LibraryID, libraryInfo.LibraryFolder); // <-- exception occurs here

但您应该尝试从db或fs(取决于您的设置)获取媒体信息。尝试使用

GetMediaFileInfo(int mediaLibraryId, string mediaFilePath) 
来自 MediaFileInfoProvider 类。

广告。更新2:

我检查了源代码的内部实现,只有当 fileInfo为null或者filePath上的对象不存在时才返回null 。请仔细检查一下。

答案 1 :(得分:0)

(网络部分,模块,事件等)的代码部分是什么?

无论如何,在获取缩略图之前,应该调用 SetMediaFileInfo 方法。以下是在Kentico 8.2中创建媒体文件的完整代码示例:

private bool CreateMediaFile()
{
    // Prepare the parameters
    string filePath = "~/CMSAPIExamples/Code/Tools/MediaLibrary/Files/Powered_by_kentico2.gif";

    // Get media library
    MediaLibraryInfo library = MediaLibraryInfoProvider.GetMediaLibraryInfo("MyNewLibrary", SiteContext.CurrentSiteName);
    if (library != null)
    {
        // Create new media file object
        MediaFileInfo mediaFile = new MediaFileInfo(Server.MapPath(filePath), library.LibraryID);

        // Create file info
        FileInfo file = FileInfo.New(Server.MapPath(filePath));
        if (file != null)
        {
            // Set the properties
            mediaFile.FileName = "MyNewFile";
            mediaFile.FileTitle = "My new file title";
            mediaFile.FileDescription = "My new file description.";
            mediaFile.FilePath = "MyNewFolder/MyNewFile.gif";
            mediaFile.FileExtension = file.Extension;
            mediaFile.FileMimeType = "image/gif";
            mediaFile.FileSiteID = SiteContext.CurrentSiteID;
            mediaFile.FileLibraryID = library.LibraryID;
            mediaFile.FileSize = file.Length;

            // Create the media file
            MediaFileInfoProvider.SetMediaFileInfo(mediaFile);

            return true;
        }
    }

    return false;
}