在 Kentico 中创建 MediaFileInfo 对象时出现 ProviderException

ProviderException while creating MediaFileInfo object in Kentico

我想从 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: Method is only supported if the user name parameter matches the user name in the current Windows Identity.

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

为什么会出现这个异常,我做错了什么?

感谢您的建议!

更新 1:

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

我的应用程序是单独的 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:

Returns image thumbnail from the disk or create a new one if doesn't exist yet.

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

(Web 部件、模块、事件等)的代码部分是什么?

无论如何,您应该在获取缩略图之前调用 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;
}

恕我直言,你不应该像这样创建新的 MediaFileInfo

MediaFileInfo fileInfo = new MediaFileInfo(filePath, libraryInfo.LibraryID, libraryInfo.LibraryFolder); // <-- exception occurs here

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

GetMediaFileInfo(int mediaLibraryId, string mediaFilePath) 

来自 MediaFileInfoProvider class.

广告。更新 2:

我已经检查了源代码的内部实现,它 returns 为空 仅当 fileInfo 为空或 filePath 上的对象不存在时。请仔细检查。