如何使用C#获取Sharepoint Online文档文件

问题描述 投票:0回答:1

它不起作用:

Uri endpointUri = new Uri(webUrl + "/\_api/web/GetFileByServerRelativeUrl('" + webRelativeUrl + "/" + documentLibName + "/" + fileName + "')/$value");
try{
HttpResponseMessage response = await client.GetAsync(endpointUri);
response.EnsureSuccessStatusCode(); // Throw on error
using (Stream contentStream = await response.Content.ReadAsStreamAsync()){
using (FileStream outputStream = new FileStream(path + fileName, FileMode.OpenOrCreate | FileMode.Append, FileAccess.Write, FileShare.None)){
await contentStream.CopyToAsync(outputStream);
}
}
Console.WriteLine("File downloaded successfully.");
}catch (HttpRequestException ex){
Console.WriteLine($"Error downloading file: {ex.Message}");
}

在这一行中它失败了。 错误:

ystem.Net.WebException
  HResult=0x80131509
  Message=The remote server returned an error: (403) FORBIDDEN.
  Source=System.Net.Requests
  StackTrace:
   at System.Net.HttpWebRequest.GetResponse()
   at System.Net.WebClient.GetWebResponse(WebRequest request)
   at System.Net.WebClient.DownloadBits(WebRequest request, Stream writeStream)
   at System.Net.WebClient.DownloadFile(Uri address, String fileName)
   at System.Net.WebClient.DownloadFile(String address, String fileName)
   at Program.<Main>$(String[] args) in E:\LeaveManagement\Sharepoint\Program.cs:line 34

我是 Sharepoint 团队的所有者,为什么它不起作用

sharepoint-online c#-6.0
1个回答
0
投票

您可以参考以下代码获取文件

static void Main(string[] args)
{
    string userName = "<user name>";
    string password = "<password>";
    var securePassword = new SecureString();
    foreach (char c in password)
    {
        securePassword.AppendChar(c);
    }
    using (ClientContext cxt = new ClientContext("<your site URL>"))
    {
        cxt.Credentials = new SharePointOnlineCredentials(userName, securePassword);
        Web web = cxt.Web;
        cxt.Load(web, a => a.ServerRelativeUrl);
        cxt.ExecuteQuery();
        List list = cxt.Web.Lists.GetByTitle("<your library name >");
        cxt.Load(list);
        cxt.Load(list.RootFolder);
        cxt.Load(list.RootFolder.Folders);
        cxt.Load(list.RootFolder.Files);
        cxt.ExecuteQuery();
        FolderCollection fcol = list.RootFolder.Folders;
        List<string> lstFile = new List<string>();
        foreach (Folder f in fcol)
        {
            if (f.Name == "<your folder name>")
            {
                cxt.Load(f.Files);
                cxt.ExecuteQuery();
                FileCollection fileCol = f.Files;
                foreach (File file in fileCol)
                {
                    lstFile.Add(file.Name);
                }
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.