(四)列表附件

列表的附件也是文件系统的一部分,它依附于普通列表的列表条目之上(文档库没有附件),它的操作在一些地方和文档库中文档的操作非常类似。

 

1、附件的读取

一个列表条目的附件可以使用SPListItem的Attachments属性访问,该属性是SPAttachmentCollection类型。这个类型在SharePoint中是一个比较特殊的类型,其特殊之处在于不存在SPAttachment类型。那么SPAttachmentCollection这个集合中存放的又是什么呢?是附件的文件名。通过使用SPWeb的GetFile方法,可以获取到附件对应的SPFile对象,之后就可以和SPFile对象一样进行读取和修改了。读取的方法可以参考下面的程序:

   1: using(SPSite site = new SPSite("http://sp2010/book"))

   2: {

   3:   using(SPWeb web = site.OpenWeb())

   4:   {

   5:     SPListItem item = web.List["Chapters"].Items[0];

   6:     string urlPrefix = item.Attachments.UrlPrefix;

   7:     foreach(string attName in item.Attachments)

   8:     {

   9:       SPFile file = web.GetFile(urlPrefix + attName);

  10:       Console.WriteLine(attName + ":" + file.Length.ToString());

  11:     }

  12:   }

  13: }

可以看到,这段程序中除了GetFile之外的一个关键点在于SPAttachmentCollection的UrlPrefix这个属性。列表的所有附件都保存在列表根目录的Attachments目录中,并按照列表条目的ID划分出子文件夹,通过直接使用UrlPrefix属性,获得某个列表条目所有附件所在文件夹的完整路径。

 

2、附件的添加和删除

附件的添加和删除与文件的上传和删除类似。在添加的时候,使用集合类——即SPAttachmentCollection的Add方法,与上传文件的区别在于,这个Add方法没有其他重载,只能指定附件的文件名和byte[]形式的文件内容,这也就意味着列表条目的附件不适合存放大文件;删除的时候,使用SPAttachmentCollection这个集合类的Delete方法和Recycle方法删除附件。

但是就像列表条目的更新一样,在修改字段值之后,需要调用SPListItem的Update方法才能使修改生效,在使用SPAttachmentCollection的Add、Delete和Recycle方法之后,必须Update一下列表条目,才能使附件的更新生效。为了使对附件的操作更加简便,SPAttachmentCollection提供了三个类似的方法:AddNow、DeleteNow和RecycleNow,使用这三个方法上传或删除附件后,可以直接生效,无需对列表条目进行Update。

SharePoint服务器端对象模型 之 访问文件和文件夹(Part 4)的更多相关文章

  1. SharePoint服务器端对象模型 之 访问文件和文件夹(Part 3)

    (三)遍历 文件系统的遍历是指按照文件夹的层级结构遍历文档库.列表的文件夹和列表条目.遍历主要有三种方式:(1)直接使用文件系统对象模型进行遍历:(2)使用SPDocumentLibrary进行遍历: ...

  2. SharePoint服务器端对象模型 之 访问文件和文件夹(Part 1)

    本节中所阐述的内容,主要适用于SharePoint文档库中的文件和文件夹,以及列表中的文件夹.系统中的其他文件(如_layouts中的文件.配置文件.程序文件等)不在本章节的讨论范围之内.   (一) ...

  3. SharePoint服务器端对象模型 之 访问网站和列表数据(Part 1)

    本节将会介绍SharePoint中最为常用的一些对象模型,以及如何使用这些对象模型来访问和操作网站中的数据.几乎所有的SharePoint服务器端开发都会涉及到这些内容,因此应着重掌握本节中所介绍的基 ...

  4. SharePoint服务器端对象模型 之 访问文件和文件夹(Part 2)

    4.添加文件夹 文件夹的创建方法在文档库和普通列表中稍有不同. 在文档库中,与一般的集合操作相同,直接使用SPFolderCollection的Add(string name)方法即可添加文件夹,例如 ...

  5. SharePoint服务器端对象模型 之 访问网站和列表数据(Part 5)

    (五)列表条目(SPListItem) SharePoint中数据的存储基本上都是通过列表条目来完成(文档库中的文档也是一种特殊的列表条目),因此在SharePoint应用开发中,最终是要和列表条目打 ...

  6. SharePoint服务器端对象模型 之 访问用户、用户组和权限(Part 1)

    (一)概述 SharePoint权限系统是整个SharePoint体系中一个比较重要的部分,权限系统主要分成两大部分:认证和授权. 认证主要解决的问题是判断登陆者是否合法,以及他究竟是哪一个用户,Sh ...

  7. SharePoint服务器端对象模型 之 访问网站和列表数据(Part 2)

    (二)列表(SPList) 列表是SharePoint中最为重要的数据容器,我们一般保存在SharePoint中的所有数据,都是保存在列表中(文档库也是一种列表),因此列表对象在SharePoint的 ...

  8. SharePoint服务器端对象模型 之 访问网站和列表数据(Part 3)

    (三)视图 与传统意义上的数据视图类似,SharePoint中的列表视图指定了列表中数据的筛选条件.排序条件.分组条件.显示栏/字段.显示条目数.显示样式等内容.在SharePoint中,使用SPVi ...

  9. SharePoint服务器端对象模型 之 访问网站和列表数据(Part 4)

    (四)栏/字段 SharePoint中的字段(中文版中叫做"栏")与传统的数据栏类似,也有不同类型的区别,不过SharePoint中内置的栏类型除了按照数据类型(如数字.日期和时间 ...

随机推荐

  1. CHAPTER ONE LOAD-BALANCING

    1.1 Synopsis In this part, we will explain how to create a load-balancer withnginxfor a lot of OpenE ...

  2. android-seekbar的thumb图片不居中显示的处理办法

    seekbar更换图片后,发现thumb的图片不会居中(竖直方向)显示了,代码如下: <SeekBar android:id="@+id/wb_seekbar" androi ...

  3. 使用sql语句实现添加、删除约束

    --主键约束(Primary Key constraint):要求主键列的数据唯一,并且不允许为空. --唯一约束(Unique Constraint):要求该列唯一,允许为空,但只能出现一个空值. ...

  4. asp.net 表单数据提交,常见方式与错误总结

    在ASP中,我们通常把表单提交到另外一个页面(接受数据页面).但是在ASP.NET中,服务端表单通常都是提交到本页面的,如果我设置 form1.action="test.aspx" ...

  5. unity, 烘焙lightmap

    1,建一个名为_scene的场景,放一个球体. 2,将球体的Static属性勾选. 3,将默认光源Directional light的Baking属性改为Baked. 4,打开Window->L ...

  6. unity, get Canvas Scaler referenceResolution

    需要using UnityEngine.UI; 然后就可以访问到CanvasScaler组件. float width=GetComponent<CanvasScaler> ().refe ...

  7. JS鼠标的拖拽原理

    拖拽功能主要是用在让用户做一些自定义的动作,比如拖动排序,弹出框拖动移动等等,效果还是蛮不错的.下面讲解一下拖拽的原理,希望可以帮助到有需要的朋友! 一.拖拽的流程动作①鼠标按下②鼠标移动③鼠标松开 ...

  8. codeforces624b Making a String

      Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Status De ...

  9. 学习抓包之如何用Charles实现“刷楼”

    为了获取一些网络中的数据,我们需要掌握抓包技术. Charles是一个 HTTP 代理服务器, HTTP 监视器,反转代理服务器.它允许一个开发者查看所有连接互联网的 HTTP 通信.这些包括Requ ...

  10. 设置一个label显示多种颜色,多种字体大小

    UILabel* label = [[UILabel alloc] init]; label.frame = CGRectMake(0, 100, 200, 100); label.textColor ...