Как получить Абсолютный URL файла в библиотеке sharepoint - PullRequest
14 голосов
/ 07 марта 2011

Я работаю в SharePoint 2010. У меня есть идентификатор библиотеки документов и идентификатор документа в этой библиотеке со мной. У меня нет ни веб-сайта, ни сайта, на котором присутствует библиотека документов. Теперь мне нужно получить полный URLдокумента во время выполнения. Как я могу получить его.Я пробовал следующее.

string filepath = currentList.DefaultViewUrl + "/" + sListItem.Url;

Пожалуйста, ответьте на это.

Ответы [ 8 ]

48 голосов
/ 07 марта 2011

Используйте поле "EncodedAbsUrl" на SPListItem. Работает также для SPFile:

SPListItem item = ...;
string absUrl = (string) item[SPBuiltInFieldId.EncodedAbsUrl];

или для SPFile

 SPFile file = ...;
 string absUrl = (string) file.Item[SPBuiltInFieldId.EncodedAbsUrl];
3 голосов
/ 13 августа 2013

Встроенный идентификатор поля, безусловно, лучший путь, но он возвращает URL-адрес в закодированном виде, который может или не может быть тем, что вы хотите.

Я думаю, что лучший способ - добавить метод расширения в класс утилит:

public static string AbsoluteUrl(this SPFile File, bool Decode = true)
{
    string EncodedUrl = File.Item[SPBuiltInFieldId.EncodedAbsUrl].ToString();
    if (Decode)
        return SPEncode.UrlDecodeAsUrl(EncodedUrl);
    else
        return EncodedUrl;
}

А затем позвоните следующим образом

Item.File.AbsoluteUrl();

, если вы хотите декодированный URL или

Item.File.AbsoluteUrl(false);

если вы хотите, чтобы URL-адрес оставался закодированным.

Обратите внимание, что значение параметра по умолчанию для декодирования будет доступно только в .Net4 + и, следовательно, только в SP2013, но вы можете легко создать метод перегрузки для SP2010. Вам также понадобится ссылка на пространство имен Microsoft.SharePoint.Utilities для доступа к классу SPEncode.

2 голосов
/ 07 марта 2011

Попробуйте,

          using (SPSite ospSite = new SPSite("http://abcd:24931"))
           {
              using (SPWeb web = ospSite.OpenWeb("/subsite")
               {
               // Get document library collection here and fetch all the document urls
                   SPDocumentLibrary docLib = (SPDocumentLibrary)web.Lists["docu"]; 

                //where docu is my  document library
                SPListItemCollection items = docLib.Items;

                   foreach (SPListItem item in items)
                    {
                       string url = item.Url;
                    }
               }
          }

Надеюсь, это поможет вам.

1 голос
/ 03 января 2012
public string GetItemURL(SPListItem item)
    {
        string web = item.Web.Url;
        string listID = item.ParentList.ID.ToString();
        string contentType = item.ContentTypeId.ToString();
        string itemID = item.ID.ToString();
        string url = web+"/_layouts/listform.aspx?PageType=4&ListID={"+listID+"}&ID="+itemID+"&ContentTypeID="+contentType;
        return url;
    }

Это работает для меня. Надеюсь, я помогу (URL элемента списка)

1 голос
/ 23 августа 2011

Если это для библиотеки документов, попробуйте это.

item.Web.Url+"/"+item.File.Url
0 голосов
/ 01 октября 2013

Используйте код ниже, чтобы получить абсолютный URL файла:

SPFile file;    
string url = file.Item[SPBuiltInFieldId.EncodedAbsUrl] as string;
0 голосов
/ 06 января 2012

Для чего бы то ни было, доступ к свойству item.Web означает, что вы на самом деле создаете экземпляр объекта SPWeb, что означает, что он должен быть удален, в противном случае вы будете вызывать утечку памяти.
Это приводит к большим затратамЛучшие и более быстрые способы уже упоминались.

Я бы использовал упомянутый подход BuiltInFieldId.EncodedAbsUrl, поскольку это дает вам самый простой доступ к тому, что вы хотите.

0 голосов
/ 10 марта 2011

Ответ строка url = currentweb.url + "/" + Listitem.url;

...