Cómo hacer mediante programación cargar un archivo a una biblioteca de documentos en sharepoint?

Actualmente estoy haciendo una aplicación de Windows con C# que agregar documentos a una biblioteca de documentos de la lista.

InformationsquelleAutor Adyt | 2009-01-22

6 Comentarios

  1. 63

    Puede cargar documentos en las bibliotecas de SharePoint mediante el Modelo de Objetos o SharePoint Webservices.

    Subir el archivo utilizando el Modelo de Objetos:

    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();
        }
    }
    • Chadworthington, SPSite es parte de Microsoft.SharePoint espacio de nombres, por lo que necesita para agregar referencia a Microsoft.SharePoint.dll. Suponiendo que se están desarrollando en el Servidor, el archivo dll se puede encontrar aquí: C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\ISAPI\Microsoft.SharePoint.dll
    • Espera un segundo… este código sólo funcionará en un cuadro se unió a la granja, ¿correcto? En cualquier otro cuadro, es necesario el uso de msdn.microsoft.com/en-us/library/ee857094.aspx
    • Estás en lo correcto. La Api de cliente son el camino para acceder al servidor de SharePoint desde el exterior. Véase también msdn.microsoft.com/en-us/library/ee537564.aspx
    • No necesita llamar myLibrary.Update(); archivo agrega después de que los Archivos.Agregar(..)
    • Zacchi, yo no veo ninguna carpeta con el nombre de la web de extensiones de servidor en la ruta «C:\Program Files\Common Files\microsoft shared». Qué necesito para instalar sharepoint en mi máquina?
    • Esto funcionó bien para mí, excepto que tuve que usar un «uso» en el filestream al eliminar el archivo después (para eliminar a trabajar). He cambiado: el uso de (FileStream fileStream = Archivo.OpenRead(fileToUpload)) { // Cargar documento SPFile spfile = doclib.Los archivos.Add(nombre de archivo, fileStream, replaceExistingFiles); }
    • Esta no es una buena solución. Se necesita ser ejecutado como alguien que es a la vez una DBO y un SP administrador de la Granja, que es un ridículo más-priv para la tarea de cargar un archivo.
    • Quiero hacer el mismo pensamiento para crear un Documento y de acogida de SharePoint utilizando .net Core MVC

  2. 12

    si obtiene este error «Valor no se encuentra dentro del rango esperado» en esta línea:

    SPFolder myLibrary = oWeb.Folders[documentLibraryName];

    vez de usar esto para solucionar el error:

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

    Uso siempre URl para obtener Listas o a otros debido a que son únicos, los nombres no son la mejor manera 😉

  3. 8
        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");
                }
            } 
        } 
    • +1 para el CheckIn si las declaraciones. Considerar a la no actualización de la myLibrary. Puede causar conflictos de concurrencia.
  4. 6

    Con SharePoint 2013 biblioteca nueva, me las arreglé para hacer algo como esto:

        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);
        }
    • Hola, estoy recibiendo por debajo de error. Sistema.NotSupportedException: El camino dado's el formato no es compatible. en el Sistema.IO.FileStream.Init(String path, FileMode modo, FileAccess de acceso, Int32 derechos, Boolean useRights, FileShare compartir, Int32 bufferSize, FileOptions opciones, SECURITY_ATTRIBUTES secAttrs, Cadena de msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) puede usted por favor ayuda?
    • La fila que le da esta excepción?
  5. 5

    Como una alternativa a los webservices, puede utilizar el poner el documento llamada desde el FrontPage API RPC. Esto tiene la ventaja adicional de que permite ofrecer a los meta-datos (columnas) en la misma solicitud que el archivo de datos. La desventaja obvia es que el protocolo es un poco más oscuro (en comparación con el muy bien documentado webservices).

    Para una aplicación de referencia que explica el uso de Frontpage RPC, ver el SharePad proyecto en CodePlex.

  6. 0
            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;
            }
    • Por favor, añadir alguna explicación a su respuesta

Dejar respuesta

Please enter your comment!
Please enter your name here