1

我想从 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”上的内容平台,我想从我的本地主机获取 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:

从磁盘返回图像缩略图,如果尚不存在则创建一个新的。

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

4

2 回答 2

2

恕我直言,您不应该像这样创建新的 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。请仔细检查。

于 2016-04-20T08:05:35.603 回答
0

(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;
}
于 2016-04-20T07:30:24.763 回答