Como você faz o upload de um arquivo para uma biblioteca de documentos no sharepoint?

Como você programaticamente carrega um arquivo em uma biblioteca de documentos no sharepoint?

Atualmente estou fazendo um aplicativo do Windows usando C # que irá adicionar documentos a uma lista de biblioteca de documentos.

Você pode carregar documentos em bibliotecas do SharePoint usando o Modelo de Objeto ou os Serviços da Web do SharePoint .

Upload usando o Modelo de Objeto:

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

se você obtiver esse erro “O valor não está dentro do intervalo esperado ” nesta linha:

 SPFolder myLibrary = oWeb.Folders[documentLibraryName]; 

use em vez disso para corrigir o erro:

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

Use sempre URl para obter listas ou outros, porque eles são únicos, os nomes não são o melhor caminho;)

  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 aos serviços da Web, você pode usar a chamada de documento put da API RPC do FrontPage. Isso tem o benefício adicional de permitir que você forneça metadados (colunas) na mesma solicitação dos dados do arquivo. A desvantagem óbvia é que o protocolo é um pouco mais obscuro (comparado aos webservices muito bem documentados).

Para um aplicativo de referência que explica o uso do RPC do Frontpage, consulte o projeto do SharePad no CodePlex.

Com a nova biblioteca do SharePoint 2013, consegui fazer algo assim:

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