如何获取sharepoint库中文件的绝对URL

时间:2011-03-07 07:08:43

标签: sharepoint url sharepoint-2010 document-library

我正在使用SharePoint 2010.我在该库中有一个文档库ID和文档ID。我没有web文件库所在的站点。所以现在我必须得到完整的URL在运行时的文档。我怎么能得到它。 我尝试了以下内容。

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

请回答这个问题。

8 个答案:

答案 0 :(得分:48)

使用SPListItem上的“EncodedAbsUrl”字段。适用于SPFile

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

SPFile

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

答案 1 :(得分:3)

内置字段ID肯定是最好的方法,但它会返回编码的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类。

答案 2 :(得分:2)

试试这个,

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

希望这会让你前进。

答案 3 :(得分:1)

如果这是针对文档库的,请尝试这个。

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

答案 4 :(得分:1)

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

这对我有用。希望我帮忙(列出项目网址)

答案 5 :(得分:0)

对于它的价值,访问item.Web属性意味着您实际上正在实例化SPWeb对象,这意味着应该将其处理掉,否则会导致内存泄漏。
当已经提到更好更快的方法时,这是一个很大的开销。

我会使用提到的BuiltInFieldId.EncodedAbsUrl方法,因为这样可以让您轻松访问所需内容。

答案 6 :(得分:0)

使用以下代码获取文件的绝对URL:

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

答案 7 :(得分:-4)

答案是 string url = currentweb.url +“/”+ Listitem.url;