通过Web应用程序将文件上载到SharePoint Online Library

时间:2018-03-28 18:06:12

标签: c# asp.net-mvc sharepoint-2013 sharepoint-online

我正在尝试创建一个允许用户将文件上载到SharePoint Online站点的Web应用程序(带有C#的ASP.NET MVC)。

此代码适用于在线SharePoint,仅当我使用实际的电子邮件和密码时。

    using (ClientContext context = new ClientContext(url))
    {

        var password = new SecureString();

        foreach(var c in "password")
        {
            password.AppendChar(c);
        }

        context.Credentials = new SharePointOnlineCredentials(email, password);

        //code to upload file
    }

但我不想将此凭据用于此Web应用程序的所有用户。因此,我一直在对此进行一些研究,并发现了基于声明的身份验证。 https://code.msdn.microsoft.com/Remote-Authentication-in-b7b6f43c#content

我绝对会尝试这一点,但我仍然想知道这是否是实现我想做的唯一方法。 Web应用程序使用Windows身份验证对用户进行身份验证,sharepoint在线站点也是如此。 Sharepoint在线网站是否真的无法从Web应用程序获取凭证?

1 个答案:

答案 0 :(得分:0)

我们可以通过REST API获取Access令牌上传文件,这里有一篇文章供您参考: SharePoint Online remote authentication (and Doc upload)

关于如何通过CSOM将文件上传到文档,这是一个供您参考的演示:

    /// <summary>
    /// upload file to document library
    /// </summary>
    /// <param name="siteUrl">http://sp/sites/DevSite</param>
    /// <param name="filePath">C:\\</param>
    /// <param name="fileName">hello2.txt</param>
    /// <param name="docLibName">MyDocLib</param>
    public static void uploadFile(string siteUrl, string filePath, string fileName, string docLibName)
    {
        siteUrl = siteUrl.EndsWith("/") ? siteUrl.Substring(0, siteUrl.Length - 1) : siteUrl;           
        ClientContext context = new ClientContext(siteUrl);
        List docLib = context.Web.Lists.GetByTitle(docLibName);
        context.Load(docLib);
        context.ExecuteQuery();

        Byte[] bytes = System.IO.File.ReadAllBytes(filePath + fileName);

        FileCreationInformation createFile = new FileCreationInformation();

        createFile.Content = bytes;
        createFile.Url = siteUrl + "/" + docLibName + "/" + fileName;
        createFile.Overwrite = true;
        Microsoft.SharePoint.Client.File newFile = docLib.RootFolder.Files.Add(createFile);
        newFile.ListItemAllFields.Update();
        context.ExecuteQuery();
    }