web-dev-qa-db-fra.com

Comment obtenir l'URL absolue d'un fichier dans la bibliothèque sharepoint

Je travaille sur SharePoint 2010.J'ai un ID de bibliothèque de documents et un ID de document dans cette bibliothèque avec moi.Je n'ai pas non plus de site Web, site dans lequel la bibliothèque de documents est présente.Je dois maintenant obtenir l'URL complète du document à l'exécution. Comment puis-je l'obtenir. J'ai essayé ce qui suit.

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

Veuillez répondre à cela.

15
Tortoise

Utilisez le champ "EncodedAbsUrl" sur le SPListItem. Fonctionne également pour SPFile:

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

ou pour un SPFile

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

L'ID de champ intégré est à coup sûr la meilleure façon de procéder, mais il renvoie l'URL sous forme codée, qui peut ou non être ce que vous voulez.

Je pense que la meilleure façon est d'ajouter quelque part une petite méthode d'extension à une classe d'utilitaires:

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

Et puis appelez comme suit

Item.File.AbsoluteUrl();

si vous voulez une URL décodée ou

Item.File.AbsoluteUrl(false);

si vous souhaitez que l'URL reste encodée.

Notez que la valeur de paramètre par défaut pour Decode sera uniquement disponible dans .Net4 + et donc SP2013 uniquement, mais vous pouvez facilement créer une méthode de surcharge pour SP2010. Vous aurez également besoin d'une référence à l'espace de noms Microsoft.SharePoint.Utilities pour accéder à la classe SPEncode.

3
Colin Gardner

Essaye ça ,

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

J'espère que cela vous permettra de continuer.

2
Furqan Hameedi

S'il s'agit de la bibliothèque de documents, essayez celle-ci.

item.Web.Url+"/"+item.File.Url
1
Maksymilian Mulawa
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;
    }

Ça marche pour moi. J'espère que j'aide (URL de l'élément de liste)

1
Andrey

Utilisez le code ci-dessous pour obtenir l'URL absolue du fichier:

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

Pour ce que ça vaut, accéder à la propriété item.Web Signifie que vous instanciez réellement l'objet SPWeb, ce qui signifie que cela devrait être supprimé sinon vous causerez une fuite de mémoire.
C'est beaucoup de frais généraux quand il existe déjà des moyens meilleurs et plus rapides.

J'utiliserais l'approche BuiltInFieldId.EncodedAbsUrl Mentionnée car cela vous donne l'accès le plus facile à ce que vous voulez.

0
Steve