Информация о версии файла клиентской объектной модели (COM) SharePoint - PullRequest
1 голос
/ 31 августа 2010

Я пытаюсь получить некоторую базовую информацию о версии файла, используя новую клиентскую объектную модель SharePoint (COM) с SharePoint 2010. Я успешно загрузил и запросил мои списки ListItem, File и FileVersionCollection следующим образом:

using (ClientContext context = new ClientContext(site)) {
   context.Load(context.Web);
   List docs = context.Web.Lists.GetByTitle("Docs");
   context.Load(docs);
   //query that returns the ListItems I want
   CamlQuery query = new CamlQuery { ViewXml = ".."};

   ListItemCollection docItems = docs.GetItems(query);
   context.Load(docItems);
   context.ExecuteQuery();

   //load the FileVersionCollection
   foreach (ListItem listItem in docItems) {
      context.Load(listItem);
      context.Load(listItem.File);
      context.Load(listItem.File.Versions);
   }
   context.ExecuteQuery();

На данный момент я могу перебрать коллекцию listItem.File.Versions и получить VersionLabel и Url.Однако мне нужно получить количество байтов версии, а объекту FileVersion не хватает свойства Size или Length.

Я решил, что могу просто прочитать версию с сервера и выброситьубрать байты (я не знаю, что это эффективно, но это должно работать) примерно так:

foreach (FileVersion version in item.File.Versions) {
   FileInformation info = File.OpenBinaryDirect(context, version.Url);

   long filesize = 0;

   Stream stream = info.Stream;
   byte[] buffer = new byte[4096];
   int read = 0;
   while ((read = stream.Read(buffer, 0, 4096)) > 0) {
      filesize += read;
   }

   //use the filesize
}

Но каждый раз, когда я выполняю File.OpenBinaryDirect, я получаю эту ошибку:

Specified argument was out of the range of valid values.
Parameter name: serverRelativeUrl

Если я возьму значение version.Url и введу его в браузер, файл откроется.

Есть предложения о том, как определить размер файла?Я бы предпочел не открывать поток HTTP и читать файл, но если до этого дойдет, тогда я это сделаю.

Кстати, я пытался создать новый тег sharepoint-com, но у меня не хватает репутации,Если кто-то с достаточным количеством очков считает, что тег стоит, то создайте его:)

Ответы [ 2 ]

1 голос
/ 24 марта 2011

SPFile.Length Получает размер файла в байтах, исключая размер любых веб-частей, используемых в файле.

0 голосов
/ 10 сентября 2012

Очевидно, что вы не можете получить доступ к содержимому предыдущих версий с помощью File.OpenBinaryDirect . Вы можете использовать WebClient для прямой загрузки через HTTP / S.

Web web = ...;
FileVersion version = ...;
using (var input = new WebClient() { UseDefaultCredentials = true }) {
    string url = web.Url + "/" + version.Url;
    byte[] content = input.DownloadData(url);
}

См. эту ветку форума об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...