Как получить Абсолютный URL-адрес файла в библиотеке sharepoint
Я работаю над SharePoint 2010. У меня есть идентификатор документа и идентификатор документа в этой библиотеке со мной. У меня нет ни веб-сайта, на котором присутствует библиотека документов. Теперь мне нужно получить полный URL-адрес документа во время выполнения. Как я могу его получить.
Я пробовал следующее.
string filepath = currentList.DefaultViewUrl + "/" + sListItem.Url;
Пожалуйста, ответьте на это.
Ответы
Ответ 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;