Подтвердить что ты не робот

Как получить Абсолютный URL-адрес файла в библиотеке sharepoint

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

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

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

4b9b3361

Ответ 1

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

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

или для SPFile

 SPFile file = ...;
 string absUrl = (string) file.Item[SPBuiltInFieldId.EncodedAbsUrl];

Ответ 2

Идентификатор встроенного поля, безусловно, лучший способ, но он возвращает 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 оставался закодированным.

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

Ответ 3

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

          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;
                    }
               }
          }

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

Ответ 4

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

item.Web.Url+"/"+item.File.Url

Ответ 5

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-адрес списка)

Ответ 6

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

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

Ответ 7

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

SPFile file;    
string url = file.Item[SPBuiltInFieldId.EncodedAbsUrl] as string;

Ответ 8

Ответ: string url = currentweb.url + "/" + Listitem.url;