SharePoint中引用图片库中缩略图的一种方式

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

缩略图规则探索:

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

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

 

ExpandedBlockStart.gif 代码
     ///   <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/留言告之,万分感谢.

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

转载于:https://www.cnblogs.com/Ryu666/archive/2009/12/24/1631407.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值