惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

大猫的无限游戏
大猫的无限游戏
月光博客
月光博客
博客园 - Franky
博客园 - 三生石上(FineUI控件)
爱范儿
爱范儿
博客园 - 司徒正美
博客园 - 叶小钗
Apple Machine Learning Research
Apple Machine Learning Research
美团技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Cloudflare Blog
B
Blog RSS Feed
阮一峰的网络日志
阮一峰的网络日志
宝玉的分享
宝玉的分享
V
Visual Studio Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
IT之家
IT之家
博客园_首页
S
SegmentFault 最新的问题
A
About on SuperTechFans
Blog — PlanetScale
Blog — PlanetScale
GbyAI
GbyAI
H
Help Net Security
MongoDB | Blog
MongoDB | Blog

博客园 - 黄耀辉

PMP应考知识点-合同类型以及选择要领 敏捷宣言及原则(中英对照) Scrum笔记 PMP(第六版)十大知识领域、五大项目管理过程组、49个过程矩阵 跟大家分享Entity Framework使用Code First方式如何连接到现有数据库 SharePoint2010主题和样式揭秘(1) 在SSIS中使用SharePoint列表作为源和目标 修复Win7桌面我的电脑右键属性的“管理”窗口打不开 将GAC中的程序集复制出来的方法 VSTS2008如果团队资源管理器中项目的报表文件夹出现“红叉”试试这样解决。 SharePoint的列表中某列去除重复值的一种方法 让乌龟SVN(TortoiseSVN)提交时忽略bin和obj目录 - 黄耀辉 - 博客园 你还在想用VSS2005的Internet访问方案来做远程协作吗? Team Foundation Server 2008使用SQLServer2008 SP1做存储层的部署方法 WSS&MOSS常见问题及解决方法[不断更新] - 黄耀辉 - 博客园 SQL注入案例曝光,请大家提高警惕 再见了亲爱的学生们,再见了敬爱的同事们,再见了信狮 ASP.NET 3.5 Extensions CTP 预览版 已经发布 .NET Framework开源了!ASP.NET 3.5扩展发布!Silverlight 2.0发布!
SharePoint中引用图片库中缩略图的一种方式
黄耀辉 · 2009-12-24 · via 博客园 - 黄耀辉

    当上传图片时,SharePoint将自动生成缩略图(当然图片格式是有要求的,但这里先忽略掉)。而当我们自己写应用时想引用这些缩略图时,想用对象模型得到缩略图的链接,找半天也没找到。近日,公司举行摄影作品展正是利用了图片库收集作品,然后做个投票的应用页时,正是使用缩略图的场景。没办法之下,只有通过直接引用缩略图链接地址的方式解决。

缩略图规则探索:

  • 通过使用图片库的过程可得知,当图片上传时会自动生成两种缩略图,一个是小图,图片库默认视图上用的,另一个是大图,查看图片库项目明细时用的。
  • 链接的规则是这样:http://站点url/子站点名称/列表名称/_t/xxx_JPG.jpg
  • _t便是所有小图的路径,大图是_w
  • xxx_JPG是原图的文件名,把"."换成"_"了,然后后缀是.jpg

知道上边规则后便着手编码把得到缩略图的链接,请看下边代码:

代码

    /// <summary>
    
/// 标题图片大小
    
/// </summary>
    public enum TitileImageSize
    {
        Small,
        Big
    }
    
/// <summary>
    
/// 图片帮助类
    
/// </summary>
    public static class ImageHelper
    {
        
/// <summary>
        
/// 获取图片缩略图URL
        
/// </summary>
        
/// <param name="webUrl">站点路径(如:SPContext.Current.Site.Url)</param>
        
/// <param name="sourceImageUrl">源图路径(相对站点的路径,如:"xxx/xxx.jpg")</param>
        
/// <returns>缩略图URL</returns>
        public static string GetTitleImageUrl(string webUrl, string sourceImageUrl,TitileImageSize size)
        {
            
string result = string.Empty;            
            
string temp = string.Empty;//将最后一个"/"替换为"/_t/",替换的逻辑在ReplaceLastGang方法中实现
            
//没有这步的话,当图片库在子级站点中的时将会出飞机
            Regex myRegex = new Regex("/");
            MatchEvaluator myMatchEvaluator 
= new MatchEvaluator(ReplaceLastGang);
            temp
=myRegex.Replace(sourceImageUrl, myMatchEvaluator);
            temp 
= temp.Replace(".""_");
            

            switch (size)
            {
                
case TitileImageSize.Small:
                    
//temp = "/_t/";
                    break;
                
case TitileImageSize.Big:
                    temp 
= temp.Replace("/_t/""/_w/");
                    
break;
                
default:
                    
break;
            }

            result 

= String.Format(@"{0}/{1}.jpg", webUrl, temp);
            
return result;
        }
        
private static string ReplaceLastGang(Match m)
        {  
            
if (m.NextMatch().Index==0)
            {
                
return "/_t/";
            }
            
else
            {
                
return m.Value;
            }    
        }

此代码已经是第二版,第一版时关键代码只有一行

result = String.Format(@"{0}/{1}.jpg", webUrl, sourceImageUrl.Replace(".""_").Replace("/", sizeText));//sizeText是_t或者_w

 但这样写发现当图片不是在根网站上,而是在二级或者三级子网站里面的话就会有问题了,后来便使用正则找到最后一个/然后才给替换解决了。

如果哪位兄弟姐妹有更好的方法或者知道对象模型本来就有哪个成员可以得到,请来http://ryu666.cnblogs.com/留言告之,万分感谢.

最后,送上投票页面的截图,处理过的,仅供欣赏,呵呵