如何将file upload到SharePoint文档库?

如何以编程方式将file upload到SharePoint文档库?

我目前正在使用C#的Windows应用程序,将文档添加到文档库列表。

您可以使用对象模型或SharePoint Web服务将文档上载到SharePoint库。

使用对象模型上传:

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

如果在此行中出现此错误“ 值不在预期范围内 ”:

 SPFolder myLibrary = oWeb.Folders[documentLibraryName]; 

用这个来解决这个错误:

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

总是使用URl来获取列表或其他人,因为它们是唯一的,名称不是最好的方法;)

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

作为webservices的替代scheme,您可以使用FrontPage RPC API中的put文档调用。 这还有一个额外的好处,就是可以在与文件数据相同的请求中提供元数据(列)。 明显的缺点是协议是比较晦涩的(与非常有据可查的web服务相比)。

有关解释使用Frontpage RPC的参考应用程序,请参阅CodePlex上的SharePad项目。

随着SharePoint 2013新库,我设法做到这样的事情:

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