2013-11-26 18 views
0

我有我的代碼來檢索登錄的用戶的詳細信息,每一件事情都OK,但我無法檢索用戶圖像 。如何從AD檢索記錄的用戶圖像?

DirectorySearcher searcher = new DirectorySearcher(); 
     searcher.SearchScope = SearchScope.Subtree; 
     searcher.Filter = string.Format(CultureInfo.InvariantCulture, "(sAMAccountName={0})", Environment.UserName); 
     //SearchResult findUser = searcher.FindOne(); 
     foreach (SearchResult findUser in searcher.FindAll()) 
     { 
      if (findUser != null) 
      { 
       DirectoryEntry user = findUser.GetDirectoryEntry(); 
       string userName = user.Properties["displayName"].Value.ToString(); 
       string departement = user.Properties["Department"].Value.ToString(); 
       string title = user.Properties["title"].Value.ToString(); 
       string[] rt = new string[] { Login, userName, Email, Mobile }; 

       Lbl_User.Text = userName; 
       Lbl_Administrative.Text = departement; 
       Lbl_Position.Text = title; 

      } 
     } 

回答

0

二進制圖像應存放在物業叫thumbnailPhoto。

 var photo = user.Properties["thumbnailPhoto"]; 
     if (photo != null) { 
     byte[] buffer = (byte[])photo.Value; 
     //var bitmap = new Bitmap(new MemoryStream(buffer, false)); 
     //bitmap.Save(@"c:\test.bmp"); 
     } 

現在,給你所標記的問題作爲asp.net你必須編寫檢索圖像通用處理器(ashx的)的事實。該處理器應該寫的

 photo.Value 

內容爲響應輸出流,並設置內容類型爲image/BMP

在你的控制/頁剛纔提到的像處理

<img src="/GenericHandler.ashx" alt="My image" /> 
1

我剛採取你的代碼,並採取了一種方法,只是爲了檢索圖像。你需要重構它,以獲得只有字節[]或thw整個圖像。

//add this 
using System.Drawing; 

static Image GetPhotoFromAD(string userName) 
{ 
    DirectorySearcher searcher = new DirectorySearcher(); 
    searcher.SearchScope = SearchScope.Subtree; 
    searcher.Filter = string.Format(CultureInfo.InvariantCulture, "(sAMAccountName={0})", userName); 
    //SearchResult findUser = searcher.FindOne(); 
    foreach (SearchResult findUser in searcher.FindAll()) 
    { 
     if (findUser != null) 
     { 
      byte[] photodata = findUser.Properties["jpegPhoto"].Value as byte[]; 
      using (MemoryStream str = new MemoryStream(photodata)) 
      { 
      return Bitmap.FromStream(str); 
      } 
     } 
    } 
} 

如果你只想要的原始數據,重要的位byte[] photodata = user.Properties["jpegPhoto"].Value as byte[];

+0

username參數不使用?有意取代'Environment.UserName'? – TygerKrash

+1

是的,謝謝。來自合併自己的代碼與行動;) – Marco