注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

忘忧草的博客

品味人生--精通IT管理和技术

 
 
 

日志

 
 
 
 

用代码实现Sharepoint2010的个人信息的照片上传(3)—gif,png格式同步  

2012-08-29 11:09:18|  分类: Moss2010 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
  • 前言

上2个部分讲到从文件夹或AD的thumbnailPhoto属性用代码同步照片到sharepoint2010的个人照片信息中去。但是大家发现没有sharepoint2010的照片库和方法支持jgp格式,我们一起去看看照片库或看看个人照片属性,都貌似只有JPG格式,否则同步会提示:参数错误。如下图:

image

但是实际情况我们的文件夹或AD的thumbnailPhoto属性并非全是jpg,可能还存在gif,png格式的头像,那我们怎么做呢?

翻看MSDN的资料我们可以看到如下例子:

bitmap.Save(newstream, System.Drawing.Imaging.ImageFormat.Jpeg);

就是把其他格式图片另存jpg的格式。因此我们在同步头像前,需要判断该照片是否jpg,如果是gif,png就需要用如上方法转换了。说道转换,大家知道上传文件的类型的判断。一般的人只知道判断扩展名是否合符要求即可,其实这个是错误的。最准确的办法就是判断二进制的前几位是固定的,附带如下格式的二进制前几位信息:

JPG = 255216

GIF = 7173

PNG = 13780

SWF = 6787

RAR = 8297

ZIP = 8075

_7Z = 55122

XLS = 208207

XLSX = 8075

  • 实现方法

我们在文件夹下放一个png的图片如下图:

image

代码段:

 //判断照片格式
public static bool IsAllowedExtension(byte[] imgArray, FileExtension[] fileEx)
        {
            MemoryStream ms = new MemoryStream(imgArray);
            System.IO.BinaryReader br = new System.IO.BinaryReader(ms);
            string fileclass = "";
            byte buffer;
            try
            {
                buffer = br.ReadByte();
                fileclass = buffer.ToString();
                buffer = br.ReadByte();
                fileclass += buffer.ToString();
            }
            catch
            {
            }
            br.Close();
            ms.Close();
            foreach (FileExtension fe in fileEx)
            {
                if (Int32.Parse(fileclass) == (int)fe)
                    return true;
            }
            return false;
        }
//照片格式二进制头
        public  enum FileExtension
        {
            JPG = 255216,
            GIF = 7173,
            PNG = 13780,
            SWF = 6787,
            RAR = 8297,
            ZIP = 8075,
            _7Z = 55122,
            XLS = 208207,
            XLSX = 8075
        }

同步代码:

/// <summary>         /// 上传图片         /// </summary>         private static void UploadPhotos()         {                      SPSite mySites = new SPSite(MySiteHostUrl);             SPWeb myWeb = mySites.OpenWeb();             SPFolder subfolderForPictures = myWeb.GetFolder("User Photos\\Profile Pictures");                          if (subfolderForPictures == null)             {                 return;             }              UserProfileManager userProfileManager = new UserProfileManager(SPServiceContext.GetContext(mySites));             //读取文档             string[] strCollection = Directory.GetFiles(@"c:\photoFolder");             foreach (string item in strCollection)                        {                 //FileInfo                 FileInfo fileinfo = new FileInfo(item);                 //                 byte[] buffer = null;                 string fileNameWithoutExtension = GetFileNameFromAccountName(MAccountName);                 string photoURL = fileinfo.FullName;                                   //if(photoURL.ToLower().EndsWith("jpg"))                 //{                                         //System.Threading.Thread.Sleep(2500);                                  buffer = ReadFile(fileinfo.FullName);                                 int largeThumbnailSize = 0X90;                 int mediumThumbnailSize = 0X60;                 int smallThumbnailSize = 0X20;                   using (MemoryStream stream = new MemoryStream(buffer))                 {                     using (Bitmap bitmap = new Bitmap(stream, true))                     {                          //判断下是否为png,gif                         if (IsAllowedExtension(buffer, new FileExtension[] { FileExtension.GIF,FileExtension.PNG }))                         {                             using (MemoryStream newstream = new MemoryStream())                             {                                 bitmap.Save(newstream, System.Drawing.Imaging.ImageFormat.Jpeg);                                 //                                 using (Bitmap newbitmap = new Bitmap(newstream, true))                                 {                                     CreateThumbnail(newbitmap, largeThumbnailSize, largeThumbnailSize, subfolderForPictures, fileNameWithoutExtension + "_LThumb.jpg");                                     CreateThumbnail(newbitmap, mediumThumbnailSize, mediumThumbnailSize, subfolderForPictures, fileNameWithoutExtension + "_MThumb.jpg");                                     CreateThumbnail(newbitmap, smallThumbnailSize, smallThumbnailSize, subfolderForPictures, fileNameWithoutExtension + "_SThumb.jpg");                                 }                             }                                                      }                         //判断下是否为jpg
                        if (IsAllowedExtension(buffer, new FileExtension[] { FileExtension.JPG }))                         {                             CreateThumbnail(bitmap, largeThumbnailSize, largeThumbnailSize, subfolderForPictures, fileNameWithoutExtension + "_LThumb.jpg");                             CreateThumbnail(bitmap, mediumThumbnailSize, mediumThumbnailSize, subfolderForPictures, fileNameWithoutExtension + "_MThumb.jpg");                             CreateThumbnail(bitmap, smallThumbnailSize, smallThumbnailSize, subfolderForPictures, fileNameWithoutExtension + "_SThumb.jpg");                         }                     }                 }                  SetPictureUrl(MAccountName, subfolderForPictures, userProfileManager, mySites.Url);                                     //}             }             myWeb.Dispose();                        mySites.Dispose();           }

?

执行一下代码,去照片库和头像看看

image

?

image

image

效果达到,同样大家可以去测试下gif的格式

  评论这张
 
阅读(472)| 评论(0)
推荐

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017