在 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 上的对象不存在时。请仔细检查。
我想从 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 上的对象不存在时。请仔细检查。