简体   繁体   中英

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

I have a byte[] data and I want to upload it to sharepoint site using c#. I also want to pass credentials for it. Can anyone please guide me.

The code I tried is:

        Uri destUri = new Uri("http://test.net/excel/docs/Forms/AllItems.aspx/");
        WebRequest req = WebRequest.Create(destUri);
        req.Method = "PUT";
        req.Credentials = CredentialCache.DefaultCredentials;
        using (req.GetRequestStream())
        {
            string destFilename = @"\\test.net\excel\docs\501.xls";
            byte[] data = new byte[10];
            System.IO.File.WriteAllBytes(destFilename, data);
        }

ERROR:

Access Denied

Current user should have add permissions on this library

public void UploadFileToDocmentLibrary(Byte[] contentArray)
{
    using (SPSite sharePointtopLevelSite = new SPSite("http://localhost"))
    {
        SPWeb websiteCollection = sharePointtopLevelSite.AllWebs["webName"];
        websiteCollection.AllowUnsafeUpdates = true;
        websiteCollection.Lists.IncludeRootFolder = true;
        SPList docLibrary = websiteCollection.Lists["listName"];
        SPFile file = websiteCollection.Files.Add(websiteCollection.Url.ToString() + "/" + docLibrary.Title.ToString() + "/" + "fileName.ext", contentArray);
        file.Update();
     }
}

If user without permissions should do it, use RunWithElevatedPrivileges statement

If I understood your requirements properly, you need to upload file into SharePoint On-Premise , right? There are several options on how to accomplish it.

Send file via HTTP POST using .NET

At least the following components could be utilized for that purpose:

Example

The example demonstrates how to upload file using WebClient.UploadFile Method :

public static void UploadFile(Uri targeUri, ICredentials credentials, string fileName)
{
     using (var client = new WebClient())
     {
         client.Credentials = credentials;
         //client.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
         var targetFileUri = targeUri + "/" + Path.GetFileName(fileName);
         client.UploadFile(targetFileUri, "PUT", fileName);      
     }
 }

Usage

 var filePath = @"C:\Documents\SharePoint User Guide.docx";
 var credentials = new NetworkCredential(userName, password, domain);
 UploadFile(new Uri("https://contoso.sharepoint.com/documents"),credentials, filePath);

Using Microsoft SharePoint Server Object Model

using (var site = new SPSite(url))
{
    using (var web = site.OpenWeb())
    {
       var list = web.Lists.TryGetList(listTitle);
       var targetFolder =  list.RootFolder;
       var fileContent = System.IO.File.ReadAllBytes(fileName);
       var fileUrl = Path.GetFileName(fileName);
       targetFolder.Files.Add(fileUrl, fileContent);
    }
}

Using Microsoft SharePoint Client Object Model

How to upload a file to a SharePoint site using File.SaveBinaryDirect Method

using (var ctx = new ClientContext(url))
{
     ctx.Credentials = new NetworkCredential(userName, password, domain);
     using (var fs = new FileStream(fileName, FileMode.Open))
     {
         var fi = new FileInfo(fileName);
         var list = ctx.Web.Lists.GetByTitle(listTitle);
         ctx.Load(list.RootFolder);
         ctx.ExecuteQuery();
         var fileUrl = String.Format("{0}/{1}", list.RootFolder.ServerRelativeUrl, fi.Name);

         Microsoft.SharePoint.Client.File.SaveBinaryDirect(ctx, fileUrl, fs, true);
     }
}

Using SharePoint Web Services

How to upload file using Copy Web Service :

 var webUri = new Uri("http://contoso.sharepoint.com");
 string sourceUrl = @"C:\Documents\SharePoint User Guide.docx";
 string destinationUrl = webUri + "/documents/SharePoint User Guide 2013.docx";
 var fieldInfo = new FieldInformation();
 FieldInformation[] fieldInfos = { fieldInfo };
 CopyResult[] result;
 using (var proxyCopy = new Copy())
 {
      proxyCopy.Url = webUri + "/_vti_bin/Copy.asmx";
      proxyCopy.Credentials= new NetworkCredential(userName, password, domain);

      var fileContent = System.IO.File.ReadAllBytes(sourceUrl);

      proxyCopy.CopyIntoItems(sourceUrl, new[] { destinationUrl }, fieldInfos, fileContent, out result);
  }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM