2016-04-20 51 views
1

創建MediaFileInfo對象我想從文件縮略圖Kentico 8.2,所以我用的方法如下:ProviderException而在Kentico

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:

返回圖像縮略圖從磁盤或如果不創建一個新的 還存在。

我不知道,爲什麼thumbnail爲null。它至少應該創建新的縮略圖。我現在應該使用@ user6043336提供的解決方案嗎?

+0

您是否已將任何角色提供者添加到web.config中? –

+0

不,我沒有在web.config中添加任何角色提供程序。有必要嗎? –

回答

2

恕我直言,你shouldn`t創建新MediaFileInfo像

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

,但你應該嘗試從數據庫或FS獲取媒體信息(取決於您的設置)。嘗試使用

GetMediaFileInfo(int mediaLibraryId, string mediaFilePath) 

MediaFileInfoProvider類。

ad。更新2:

我已經檢查了源代碼的內部實現,僅當 fileInfo爲空或filePath上的對象不存在時,纔會返回空值。請仔細檢查一下。

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; 
} 
+0

感謝您的答案,請參閱我的更新1。 –