Я искал и нашел несколько примеров того, как это сделать, но я не могу заставить их работать - ну, часть этого не работает. Я могу выполнить загрузку файла, но следующая попытка изменить свойства не удалась.
Я пытаюсь загрузить файл из полезной нагрузки base64 - эта часть работает, но когда я впоследствии пытаюсь отредактировать свойства (настраиваемый столбец), связанные с файлом, код дает сбой.
Вот код (упрощенный для удобства чтения): (обратите внимание, что props — это набор пользовательских объектов (FileProperty) с именем и атрибутом value).
using (ClientContext context = new ClientContext("<sharepoint_server_url>"))
{
context.Credentials = new SharePointOnlineCredentials(<usr>,<secure_pwd>);
using (System.IO.MemoryStream ms = new System.IO.MemoryStream(Convert.FromBase64String(<base64_content>)))
{
File.SaveBinaryDirect(context, <relative_path>, ms, true);
}
// file is uploaded - so far so good!
// attempt to edit properties of the file.
if (props != null)
{
if (props.Count > 0)
{
File newFile = context.Web.GetFileByServerRelativeUrl(<relative_path>);
context.Load(newFile);
context.ExecuteQuery();
newFile.CheckOut();
ListItem item = newFile.ListItemAllFields;
foreach (FileProperty fp in props)
{
item[fp.name] = fp.value;
}
item.Update();
newFile.CheckIn(string.Empty, CheckinType.OverwriteCheckIn);
}
}
}
Этот код выдает исключение в той части, где я пытаюсь обновить свойства. Сообщение: Файл не найден.
Может ли кто-нибудь сказать мне, что не так с этим примером, или привести другой пример того, как это сделать?
Кроме того, вопрос - есть ли способ обратиться к файлу по уникальному идентификатору, который будет одинаковым независимо от того, где на сервере SharePoint файл находится или куда он перемещен?
Я надеюсь, что кто-то может мне помочь - спасибо :)