GetFileByServerRelativePath не работает и всегда возвращает файл не найден - PullRequest
0 голосов
/ 12 июня 2019

Ранее я использовал 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 ... Я не могу понять, что я делаю неправильно ???

Пожалуйста, помогите !!!

Ответы [ 2 ]

2 голосов
/ 13 июня 2019

Мой тестовый код для вашей справки.

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

enter image description here

0 голосов
/ 15 июня 2019

Это здорово! Спасибо, ваш пример открыл мне глаза, и я обнаружил, что единственной проблемой в моем коде был URL, который я передавал, содержал закодированные символы HTML !!! Я передавал пробелы как% 20, и это вызвало проблему !!! Как только я удалил% 20 и заменил на пробел, все было хорошо! Это имеет смысл, поскольку FromDecodedUrl фактически снова кодировал% 20, что привело к неверному URL!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...