c# - 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 ...我不明白我做错了什么???
请帮忙!!!
解决方案
我的测试代码供您参考。
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();
}
推荐阅读
- bash - 如何通过注入变量来绕过 if 指令
- regex - 删除单行中的固定文件扩展名
- java - 如何在 Spring Boot 中从根键读取值
- javascript - 如果文档不存在,angularfire6 文档更新命令会失败吗?
- http - 如何在 react-admin 中动态更改 http 标头?
- java - 在不使用数组列表的情况下在 Java 中计算概率?
- java - 为什么像 List/Map/Set.of(...) 或 Arrays.asList(...) 这样的方法会返回一个不可变列表?
- python - Django 表单:自定义过滤器“addclass”不起作用
- vb.net - 绑定到 Combobox SelectedIndex 的问题
- sql - SQL获取平均值的最大值