Sharepoint, как узнать килобайты вложения без его загрузки? - PullRequest
0 голосов
/ 08 октября 2009

У меня есть список элементов в Sharepoint, у них есть заголовок, описание и возможность иметь вложение. Это классический список.

Мне нужно составить список всех этих элементов с указанием килобайтов вложения.

Проблема в том, что я не могу сделать FileInfo, потому что единственный путь, который я знаю, это путь URI: http://example.com/../attachments/delete.txt

Как я могу узнать kbs без выполнения веб-запроса, который заставляет меня скачать файл, чтобы получить эту информацию.

Ответы [ 2 ]

3 голосов
/ 08 октября 2009

Попробуйте это:

using (SPSite site = new SPSite("http://fsm/Lists/sample/AllItems.aspx"))
{
    using (SPWeb web = site.OpenWeb())
    {
        SPList list = web.Lists["sample"];
        SPListItemCollection items = list.GetItems(new SPQuery());
        foreach (SPListItem item in items)
        {
            foreach (string attachment in item.Attachments)
            {
                // "http://fsm" + "Lists/sample/1_.000"
                Uri itemAddress = new Uri(new Uri(web.Url), item.Url);
                Uri attachmentAddress = new Uri(itemAddress, 
                    String.Format("Attachments/{0}/{1}", item.ID, attachment));
                SPFile file = web.GetFile(attachmentAddress.AbsoluteUri);
                Console.WriteLine("{0} have {1} bytes", file.Name, file.Length);
            }
        }
    }
}
1 голос
/ 08 октября 2009

Обычно размер файла можно получить из универсального URI, сделав запрос HEAD, который выбирает только заголовки, и посмотрев заголовок Content-Length в ответе.

System.Net.WebRequest req = System.Net.HttpWebRequest.Create("https://stackoverflow.com/robots.txt");
req.Method = "HEAD";
System.Net.WebResponse resp = req.GetResponse();
int ContentLength;
if(int.TryParse(resp.Headers.Get("Content-Length"), out ContentLength))
{ 
    //Do something useful with ContentLength here 
}

( код из этого вопроса stackoverflow )

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