首页 > 解决方案 > GetFileByServerRelativePath 不起作用,总是返回找不到文件

问题描述

我以前使用 GetFileByServerRelativeUrl,它工作正常,但不支持字符 # 和 %,而 GetFileByServerRelativePath 应该支持它们,所以我按照下面的方法更改了代码,但现在它不适用于任何文件???

public bool DownloadFile(string filepath, out string     Base64EncodedFile, out string errormessage)
        {
            Base64EncodedFile = string.Empty;
            errormessage = string.Empty;

            try
            {
                Uri filename = new Uri(filepath);                
                string serverrelative = filename.AbsolutePath;

                //This old method does not support # or % but works fine
                //Microsoft.SharePoint.Client.File file = context.Web.GetFileByServerRelativeUrl(serverrelative);

                // >> Replaced with this
                ResourcePath filePathDecoded = ResourcePath.FromDecodedUrl(serverrelative);
                Microsoft.SharePoint.Client.File file = context.Web.GetFileByServerRelativePath(filePathDecoded);
                // << Replaced with this

                context.Load(file);
                ClientResult<System.IO.Stream> streamResult = file.OpenBinaryStream();
                context.ExecuteQuery();

                Base64EncodedFile = ConvertToBase64(streamResult.Value);            
                return true;
            }
            catch (Exception ex)
            {
                errormessage = ex.Message;
                return false;
            }
        }

SharepointClient.SharepointClient newupload = new SharepointClient.SharepointClient("https://xxxxxxx.sharepoint.com/sites/xxxxxxxxx/", usernametext.Text, textpassword.Text);

            newupload.DownloadFile(Url.Text, out EncodedAbs, out errormessage);

如果我使用旧的 GetFileByServerRelativeUrl 它工作得很好......我尝试了一切,但我似乎无法开始工作 GetFileByServerRelativePath ...我不明白我做错了什么???

请帮忙!!!

标签: c#sharepoint

解决方案


我的测试代码供您参考。

using (ClientContext ctx = new ClientContext(targetSiteURL))
            {
                ctx.Credentials = onlineCredentials;

                string fileName = "FileWith#%.docx";
                var _File = ctx.Web.GetFileByServerRelativePath(ResourcePath.FromDecodedUrl($"/sites/lee/MyDoc/{fileName}"));
                ctx.Load(_File);
                ctx.ExecuteQuery();
                Console.Write(_File.ServerRelativeUrl);
                Console.WriteLine();
            }

在此处输入图像描述


推荐阅读