How do you upload a file to a document library in sharepoint?

How do you programmatically upload a file to a document library in sharepoint? I am currently making a Windows application using C# that will add documents to a document library list.

95.3k 17 17 gold badges 268 268 silver badges 336 336 bronze badges asked Jan 22, 2009 at 8:57 1,472 7 7 gold badges 26 26 silver badges 39 39 bronze badges duplicate of stackoverflow.com/questions/21508773/… Commented Nov 3, 2022 at 14:58

8 Answers 8

You can upload documents to SharePoint libraries using the Object Model or SharePoint Webservices.

Upload using Object Model:

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(); >> 
17.2k 3 3 gold badges 44 44 silver badges 67 67 bronze badges answered Jan 22, 2009 at 11:01 Henrique Zacchi Henrique Zacchi 1,174 12 12 silver badges 17 17 bronze badges

Chadworthington, SPSite is part of Microsoft.SharePoint namespace, so you need to add reference to Microsoft.SharePoint.dll. Assuming you are developing on the Server, the dll can be found here: C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\ISAPI\Microsoft.SharePoint.dll

Commented Jun 4, 2009 at 9:23

Wait a sec. this code will only work in a box joined to the farm, correct? In any other box, it needs to use msdn.microsoft.com/en-us/library/ee857094.aspx

Commented May 5, 2011 at 2:35 You dont need to call myLibrary.Update(); file adds after Files.Add(..) Commented Jun 10, 2012 at 12:45

This worked well for me, except that I had to use a "using" on the filestream when deleting the file afterwards (for the delete to work). I changed it to: using (FileStream fileStream = File.OpenRead(fileToUpload)) < // Upload document SPFile spfile = doclib.Files.Add(fileName, fileStream, replaceExistingFiles); >

Commented Jul 28, 2015 at 22:49

This is not a good solution. It needs to be run as someone who is both a DBO and a SP Farm administrator, which is a ridiculous over-priv for the task of uploading a file.

Commented Jun 24, 2016 at 15:52

if you get this error "Value does not fall within the expected range" in this line:

SPFolder myLibrary = oWeb.Folders[documentLibraryName]; 

use instead this to fix the error:

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

Use always URl to get Lists or others because they are unique, names are not the best way ;)

answered Dec 5, 2012 at 15:34 Ricardo Vieira Ricardo Vieira 740 7 7 silver badges 13 13 bronze badges

With SharePoint 2013 new library, I managed to do something like this:

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); > 
3,965 3 3 gold badges 31 31 silver badges 52 52 bronze badges answered Jul 13, 2014 at 12:22 Uziel Sulkies Uziel Sulkies 628 7 7 silver badges 16 16 bronze badges

Hello, I am getting below error. System.NotSupportedException: The given path's format is not supported. at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) can you please help?

Commented Jul 9, 2015 at 12:58 Which row gives you this exception? Commented Jul 12, 2015 at 8:27 What is name of library? is it available at nuget? Commented Oct 10, 2023 at 2:18
string filePath = @"C:\styles\MyStyles.css"; string siteURL = "http://example.org/"; 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"); >> > 
3,965 3 3 gold badges 31 31 silver badges 52 52 bronze badges answered Oct 10, 2012 at 15:58 user1735365 user1735365 89 1 1 silver badge 2 2 bronze badges

+1 for CheckIn if statements. Consider to not updating the myLibrary. It can cause concurrency conflicts.

Commented Nov 13, 2013 at 9:07

As an alternative to the webservices, you can use the put document call from the FrontPage RPC API. This has the additional benefit of enabling you to provide meta-data (columns) in the same request as the file data. The obvious drawback is that the protocol is a bit more obscure (compared to the very well documented webservices).

For a reference application that explains the use of Frontpage RPC, see the SharePad project on CodePlex.

answered Jan 22, 2009 at 19:25 17.2k 1 1 gold badge 64 64 silver badges 97 97 bronze badges
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)