如何将文件上传到sharepoint中的文档库?

时间:2015-04-10 22:24:41

标签: c# sharepoint sharepoint-2010

我有一个byte []数据,我想用c#将它上传到sharepoint网站。我也想传递凭据。任何人都可以指导我。

我尝试的代码是:

        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

2 个答案:

答案 0 :(得分:1)

如果我理解您的要求,您需要将文件上传到 SharePoint内部部署,对吗?如何实现它有几种选择。

使用.NET

通过HTTP POST发送文件

至少可以使用以下组件:

示例

该示例演示了如何使用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);      
     }
 }

<强>用法

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

使用Microsoft SharePoint Server对象模型

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

使用Microsoft SharePoint客户端对象模型

如何使用File.SaveBinaryDirect Method

将文件上传到SharePoint网站
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);
     }
}

使用SharePoint Web服务

如何使用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);
  }

答案 1 :(得分:0)

当前用户应该对此库添加权限

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

如果没有权限的用户应该这样做,请使用RunWithElevatedPrivileges语句