如何通过标准Web服务之一将文件上载到SharePoint库

时间:2010-08-31 14:05:00

标签: c# .net sharepoint sharepoint-2010

我必须将一些XML文件上传到SharePoint库。我必须从不是SharePoint服务器之一的计算机上执行此操作(因此对象模型将无法工作)。该库还有一个自定义(整数)列,我必须为上传的文件设置它的值。

如何使用SharePoint 2010的标准WebServices上载文件和值?

3 个答案:

答案 0 :(得分:6)

我现在通过使用客户端对象模型(如Doug建议的那样)来解决它。使用COM上传文件非常简单:

public void UploadXmlFile(string xmlContent, int orderNumber)
{
    string filename = DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss") + "_" + orderNumber + ".xml";
    ClientContext context = new ClientContext(absoluteHostUrl + relativeWebUrl);
    using (MemoryStream stream = new MemoryStream())
    {
        // use a MemoryStream for the file contents
        StreamWriter writer = new StreamWriter(stream);
        writer.Write(xmlContent);
        writer.Flush();
        stream.Position = 0;
        // ... and upload it.
        Microsoft.SharePoint.Client.File.SaveBinaryDirect(
            context,
            "/" + relativeWebUrl + "Lists/" + libraryName + "/" + filename,
            stream,
            false);
    }
    // ...

...但在上传文件后签出,我仍然需要设置我的整数列:

    // ...
    // get the created entry
    Web web = context.Web;
    List list = web.Lists.GetByTitle(libraryName);
    ListItemCollection itemCol = list.GetItems(new CamlQuery() { ViewXml = "<View/>" });
    context.Load(itemCol,
        items => items
            .Include(i => i[COLUMN_IMPORTORDERNUMBER])
            .Where(i => (string)i[COLUMN_FILELEAFREF] == filename)
            .Take(1)
            );
    context.ExecuteQuery();
    // ... found it? ...
    if (itemCol != null && itemCol.Count > 0)
    {
        ListItem item = itemCol[0];
        // ... set the ImportOrderNumber
        item[COLUMN_IMPORTORDERNUMBER] = orderNumber;
        item.Update();
        // ... and check in
        item.File.CheckIn("Checked in by WebService", CheckinType.MajorCheckIn);
        context.ExecuteQuery();
    }
}

答案 1 :(得分:2)

我还没有使用它,但客户端对象模型可能是一个很好的选择。

答案 2 :(得分:0)

您可以使用电子邮件到列表这么简单的事情,并从中创建项目吗?