Comment télécharger un fichier dans une bibliothèque de documents dans sharepoint?

Comment télécharger un fichier par programme dans une bibliothèque de documents dans sharepoint?

Je fais actuellement une application Windows en utilisant C# qui va ajouter des documents à une liste de bibliothèque de documents.

40
demandé sur Helen 2009-01-22 11:57:15

5 réponses

Vous pouvez télécharger des documents dans des bibliothèques SharePoint à l'aide du modèle objet ou SharePoint Webservices.

Télécharger en utilisant le modèle D'objet:

String fileToUpload = @"C:\YourFile.txt";
String sharePointSite = "http://yoursite.com/sites/Research/";
String documentLibraryName = "Shared Documents";

using (SPSite oSite = new SPSite(sharePointSite))
{
    using (SPWeb oWeb = oSite.OpenWeb())
    {
        if (!System.IO.File.Exists(fileToUpload))
            throw new FileNotFoundException("File not found.", fileToUpload);                    

        SPFolder myLibrary = oWeb.Folders[documentLibraryName];

        // Prepare to upload
        Boolean replaceExistingFiles = true;
        String fileName = System.IO.Path.GetFileName(fileToUpload);
        FileStream fileStream = File.OpenRead(fileToUpload);

        // Upload document
        SPFile spfile = myLibrary.Files.Add(fileName, fileStream, replaceExistingFiles);

        // Commit 
        myLibrary.Update();
    }
}
61
répondu Henrique Zacchi 2013-03-21 15:47:57

Si vous obtenez cette erreur "Valeur n'est pas comprise dans la plage attendue" dans cette ligne:

SPFolder myLibrary = oWeb.Folders[documentLibraryName];

Utilisez plutôt ceci pour corriger l'erreur:

SPFolder myLibrary = oWeb.GetList(URL OR NAME).RootFolder;

Utilisez toujours L'URl pour obtenir des listes ou d'autres parce qu'elles sont uniques, les noms ne sont pas le meilleur moyen ;)

11
répondu Ricardo Vieira 2012-12-05 15:34:05
    string filePath = @"C:\styles\MyStyles.css"; 
    string siteURL = "http://MyDomain.net/"; 
    string libraryName = "Style Library"; 

    using (SPSite oSite = new SPSite(siteURL)) 
    { 
        using (SPWeb oWeb = oSite.OpenWeb()) 
        { 
            if (!System.IO.File.Exists(filePath)) 
                throw new FileNotFoundException("File not found.", filePath);                     

            SPFolder libFolder = oWeb.Folders[libraryName]; 

            // Prepare to upload 
            string fileName = System.IO.Path.GetFileName(filePath); 
            FileStream fileStream = File.OpenRead(filePath); 

            //Check the existing File out if the Library Requires CheckOut
            if (libFolder.RequiresCheckout)
            {
                try {
                    SPFile fileOld = libFolder.Files[fileName];
                    fileOld.CheckOut();
                } catch {}
            }

            // Upload document 
            SPFile spfile = libFolder.Files.Add(fileName, fileStream, true); 

            // Commit  
            myLibrary.Update(); 

            //Check the File in and Publish a Major Version
            if (libFolder.RequiresCheckout)
            {
                    spFile.CheckIn("Upload Comment", SPCheckinType.MajorCheckIn);
                    spFile.Publish("Publish Comment");
            }
        } 
    } 
7
répondu user1735365 2012-10-10 15:58:17

Comme alternative aux services web, vous pouvez utiliser l'appelput document de L'API RPC FrontPage. Cela a l'avantage supplémentaire de vous permettre de fournir des méta-données (colonnes) dans la même requête que les données du fichier. L'inconvénient évident est que le protocole est un peu plus obscur (par rapport aux webservices très bien documentés).

Pour une application de référence qui explique L'utilisation de FrontPage RPC, consultez le projetSharePad sur CodePlex.

5
répondu Paul-Jan 2009-01-22 19:25:35

Avec la nouvelle bibliothèque SharePoint 2013, j'ai réussi à faire quelque chose comme ceci:

    private void UploadToSharePoint(string p, out string newUrl)  //p is path to file to load
    {
        string siteUrl = "https://myCompany.sharepoint.com/site/";
        //Insert Credentials
        ClientContext context = new ClientContext(siteUrl);

        SecureString passWord = new SecureString();
        foreach (var c in "mypassword") passWord.AppendChar(c);
        context.Credentials = new SharePointOnlineCredentials("myUserName", passWord);
        Web site = context.Web;

        //Get the required RootFolder
        string barRootFolderRelativeUrl = "Shared Documents/foo/bar";
        Folder barFolder = site.GetFolderByServerRelativeUrl(barRootFolderRelativeUrl);

        //Create new subFolder to load files into
        string newFolderName = baseName + DateTime.Now.ToString("yyyyMMddHHmm");
        barFolder.Folders.Add(newFolderName);
        barFolder.Update();

        //Add file to new Folder
        Folder currentRunFolder = site.GetFolderByServerRelativeUrl(barRootFolderRelativeUrl + "/" + newFolderName);
        FileCreationInformation newFile = new FileCreationInformation { Content = System.IO.File.ReadAllBytes(@p), Url = Path.GetFileName(@p), Overwrite = true };
        currentRunFolder.Files.Add(newFile);
        currentRunFolder.Update();

        context.ExecuteQuery();

        //Return the URL of the new uploaded file
        newUrl = siteUrl + barRootFolderRelativeUrl + "/" + newFolderName + "/" + Path.GetFileName(@p);
    }
3
répondu Uziel Sulkies 2014-07-13 12:22:45