测试在Sharepoint中存储文件的函数

时间:2017-01-31 14:59:21

标签: c# sharepoint visual-studio-2015

我有一个将文件存储到Sharepoint的功能,我想知道测试它的任何方法,而不是真正尝试在sharepoint上放任何东西。此外,如果有人有更好的功能将文件存储到sharepoint,那么如果你能分享它我会很感激。 这是我的功能:

public static void UploadFile(ClientContext context, string listTitle, string fileName)
{
        using (var fs = new FileStream(fileName, FileMode.Open))
        {
            var fi = new FileInfo(fileName);
            var list = context.Web.Lists.GetByTitle(listTitle);
            context.Load(list.RootFolder);
            context.ExecuteQuery();
            var fileUrl = String.Format("{0}/{1}", list.RootFolder.ServerRelativeUrl, fi.Name);

            Microsoft.SharePoint.Client.File.SaveBinaryDirect(context, fileUrl, fs, true);
        }
    }

1 个答案:

答案 0 :(得分:1)

开箱即用是不可能的。要知道文件是否已成功导入,必须成功导入该文件。

我认为解决这个问题的唯一方法是事先逐一检查每个细节:

  • 权限是否正常?
  • 新项目的列值是否遵循验证规则?
  • 每个列值都是正确的数据类型吗?
等等......如果你问我,真烦人。最简单的方法仍然是使用您网站的测试版本(请参阅this了解如何复制网站的结构。)

谈论列,你似乎没有,所以SaveBinaryDirect有效。如果您想设置列值,则必须分两步执行,如下所示:

// Upload
FileCreationInformation fileInfo = new FileCreationInformation();
fileInfo.Content = IOFile.ReadAllBytes(filePath);
fileInfo.Url = Path.GetFileName(filePath);
Microsoft.SharePoint.Client.File uploadFile = rootFolder.Files.Add(fileInfo);

// Columns setting
ListItem listItem = uploadFile.ListItemAllFields;
listItem["Field1"] = "foo";
listItem["Field2"] = "bar";
listItem.Update();

// Execution
context.ExecuteQuery();

编辑:@RandomStranger指出了TransactionScope。它似乎不适用于开箱即用的SharePoint,但this link提供了如何解决它的洞察力(创建自己的事务管理器,甚至使用列表版本控制)。