.Net Core 下载 SharePoint Online 文件

发布时间 2023-04-27 01:47:09作者: 霖雨

  前言

  最近,在使用Net Core写SharePoint的一些工具,这不写到了下载文件的功能,但是Net Core中有一些方法已经被遗弃了,所以记录一下。

  正文

  1.我们在Net Framework中,通常会使用下面的方法进行文件下载:

FileInformation fileinfo = Microsoft.SharePoint.Client.File.OpenBinaryDirect(context, filepath);

  2.但是,OpenBinaryDirect这个方法在Net Core中被弃用了,我们只能换下面的方法了:

string filepath = "/sites/Sample/Shared Documents/Sample.xlsx";

ClientContext context = GetAppCtx();
Web web = context.Site.OpenWeb("Web");
File file = web.GetFileByServerRelativeUrl(filepath);

Microsoft.SharePoint.Client.ClientResult<Stream> mstream = file.OpenBinaryStream();

context.Load(file);
context.ExecuteQuery();

using (System.IO.FileStream localFS = System.IO.File.Open(@"D:\Sample.xlsx", FileMode.OpenOrCreate))
{
    mstream.Value.CopyTo(localFS);
}

  3.先要下载对应的工具包,如下图:

  4.在头部引用PnP Framework的方法,如下: 

using AuthenticationManager = PnP.Framework.AuthenticationManager;

  5.编写用App Id进行认证的方法,这个方法是通用的,只需要更换siteUrl,appId和appSecret三个参数就可以了:

public static ClientContext GetAppCtx()
{
    string siteUrl = "https://linyu.sharepoint.com/sites/Sample";
    string appId = "e301b508-1234-5678-815d-1015df612345";
    string appSecret = "NpHdv0fWHagI/8ja6kzBf1234abcabepkPRPqipAbt8=";

    try
    {
        AuthenticationManager repositoryAuthenticationManager = new AuthenticationManager();
        ClientContext ctx = repositoryAuthenticationManager.GetACSAppOnlyContext(siteUrl, appId, appSecret);
        return ctx;
    }
    catch
    {
        return null;
    }
}

  6.我们看一下CSOM在Net Framework和Net Core中的一些区别,如下图: