web-dev-qa-db-fra.com

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

Comment téléchargez-vous par programme un fichier dans une bibliothèque de documents dans SharePoint?

Je suis en train de créer une application Windows à l'aide de C # qui ajoutera des documents à une liste de bibliothèques de documents.

44
Adyt

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

Télécharger à l'aide d'un 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();
    }
}
64
Henrique Zacchi

si vous obtenez cette erreur "la valeur ne se situe pas 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 URl pour obtenir des listes ou d’autres, car elles sont uniques, les noms ne sont pas le meilleur moyen;)

12
Ricardo Vieira
    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");
            }
        } 
    } 
8
user1735365

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);
    }
6
Uziel Sulkies

Au lieu des services Web, vous pouvez utiliser l'appel put document à partir de l'API RPC FrontPage. Cela présente l’avantage supplémentaire de vous permettre de fournir des métadonnées (colonnes) dans la même demande que les données du fichier. L'inconvénient évident est que le protocole est un peu plus obscur (par rapport aux services Web très bien documentés).

Pour une application de référence expliquant l'utilisation de Frontpage RPC, voir le projet SharePad sur CodePlex.

5
Paul-Jan
        try
        {
            //Variablen für die Verarbeitung
            string source_file = @"C:\temp\offer.pdf";
            string web_url = "https://stackoverflow.sharepoint.com";
            string library_name = "Documents";
            string admin_name = "[email protected]";
            string admin_password = "Password";

            //Verbindung mit den Login-Daten herstellen
            var sercured_password = new SecureString();
            foreach (var c in admin_password) sercured_password.AppendChar(c);
            SharePointOnlineCredentials credent = new 
            SharePointOnlineCredentials(admin_name, sercured_password);

            //Context mit Credentials erstellen
            ClientContext context = new ClientContext(web_url);
            context.Credentials = credent;

            //Bibliothek festlegen
            var library = context.Web.Lists.GetByTitle(library_name);

            //Ausgewählte Datei laden
            FileStream fs = System.IO.File.OpenRead(source_file);

            //Dateinamen aus Pfad ermitteln
            string source_filename = Path.GetFileName(source_file);

            //Datei ins SharePoint-Verzeichnis hochladen
            FileCreationInformation fci = new FileCreationInformation();
            fci.Overwrite = true;
            fci.ContentStream = fs;
            fci.Url = source_filename;
            var file_upload = library.RootFolder.Files.Add(fci);

            //Ausführen
            context.Load(file_upload);
            context.ExecuteQuery();

            //Datenübertragen schließen
            fs.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Fehler");
            throw;
        }
0
Eren Pak