¿Cómo se sube un archivo a una biblioteca de documentos en Sharepoint?

¿Cómo cargas programáticamente un archivo a una biblioteca de documentos en Sharepoint?

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

Puede cargar documentos en bibliotecas de SharePoint utilizando el Modelo de objetos o los servicios web de SharePoint .

Cargar usando 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(); } } 

si obtiene este error “El valor no está dentro del rango esperado ” en esta línea:

 SPFolder myLibrary = oWeb.Folders[documentLibraryName]; 

use en su lugar esto para corregir el error:

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

Use siempre URl para obtener Listas u otros porque son únicos, los nombres no son la mejor manera;)

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

Como alternativa a los servicios web, puede usar la llamada al documento put desde FrontPage RPC API. Esto tiene el beneficio adicional de permitirle proporcionar metadatos (columnas) en la misma solicitud que los datos del archivo. El inconveniente obvio es que el protocolo es un poco más oscuro (en comparación con los servicios web muy bien documentados).

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

Con la nueva biblioteca de SharePoint 2013, logré 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); }