File 从完整url获取列表名称
我有数百个不同的随机URL,所有文档都在libs中,没有来自不同农场、不同网站集和站点的任何其他参数,目标是从SharePoint下载一个二进制数组文件 例如,传入url=File 从完整url获取列表名称,file,sharepoint,download,csom,File,Sharepoint,Download,Csom,我有数百个不同的随机URL,所有文档都在libs中,没有来自不同农场、不同网站集和站点的任何其他参数,目标是从SharePoint下载一个二进制数组文件 例如,传入url= 那么,如何从中获取(a)正确的网站集根url(b)网站根url(c)库根url?我现在想到的唯一方法是慢慢剥离url的每个部分,直到例如Rootfolder不再给出异常。。。或者另一种方法是慢慢地在url的第一部分添加位,直到rootfolder nog longers出现异常,然后查询子网站等。我已经提出了一种工作方法,但
那么,如何从中获取(a)正确的网站集根url(b)网站根url(c)库根url?我现在想到的唯一方法是慢慢剥离url的每个部分,直到例如Rootfolder不再给出异常。。。或者另一种方法是慢慢地在url的第一部分添加位,直到rootfolder nog longers出现异常,然后查询子网站等。我已经提出了一种工作方法,但它似乎很详细,所以任何改进建议都可以通过“下载文件,如果其中一个特定列的值为“是”:
public-void-getDocument(文档文档)
{
//获取文件名
Uri=新的Uri(doc.Uri);
doc.filename=“”;
doc.filename=System.IO.Path.GetFileName(uri.LocalPath);
//字符串fullPathWithoutFileName=docUri.Replace(文件名“”);
//还将包括?a&b so:
字符串[]splitDocUri=doc.uri.Split('/');
字符串fullPathWithoutFileName=“”;
for(int i=0;i
关键是只接受网站的url。
但如果url将以以下格式指定:
http://site/web/documents/file.docx
然后将发生异常System.Net.WebException
以下示例演示如何从请求Url解析ClientContext
:
public static class ClientContextUtilities
{
/// <summary>
/// Resolve client context
/// </summary>
/// <param name="requestUri"></param>
/// <param name="context"></param>
/// <param name="credentials"></param>
/// <returns></returns>
public static bool TryResolveClientContext(Uri requestUri, out ClientContext context, ICredentials credentials)
{
context = null;
var baseUrl = requestUri.GetLeftPart(UriPartial.Authority);
for (int i = requestUri.Segments.Length; i >= 0; i--)
{
var path = string.Join(string.Empty, requestUri.Segments.Take(i));
string url = string.Format("{0}{1}", baseUrl, path);
try
{
context = new ClientContext(url);
if (credentials != null)
context.Credentials = credentials;
context.ExecuteQuery();
return true;
}
catch (Exception ex) {}
}
return false;
}
}
因为您的目标是下载一个文件,所以有一种非常简单的方法来完成它,而无需解析url部分 例如,使用:
如果根网站集uri处于打开状态,它会工作吗_http://server/no/no/here ?下载比较好!但是在允许下载之前需要先检查一些专栏。应该,至少我从来没有遇到过任何问题,不管它是否是根网站集
public static class ClientContextUtilities
{
/// <summary>
/// Resolve client context
/// </summary>
/// <param name="requestUri"></param>
/// <param name="context"></param>
/// <param name="credentials"></param>
/// <returns></returns>
public static bool TryResolveClientContext(Uri requestUri, out ClientContext context, ICredentials credentials)
{
context = null;
var baseUrl = requestUri.GetLeftPart(UriPartial.Authority);
for (int i = requestUri.Segments.Length; i >= 0; i--)
{
var path = string.Join(string.Empty, requestUri.Segments.Take(i));
string url = string.Format("{0}{1}", baseUrl, path);
try
{
context = new ClientContext(url);
if (credentials != null)
context.Credentials = credentials;
context.ExecuteQuery();
return true;
}
catch (Exception ex) {}
}
return false;
}
}
ClientContext context;
if (ClientContextUtilities.TryResolveClientContext(requestUri, out context, null))
{
using (context)
{
var baseUrl = requestUri.GetLeftPart(UriPartial.Authority);
var fileServerRelativeUrl = requestUri.ToString().Replace(baseUrl, string.Empty);
var file = context.Web.GetFileByServerRelativeUrl(fileServerRelativeUrl);
context.Load(file);
context.Load(context.Web);
context.Load(context.Site);
context.ExecuteQuery();
}
}
private static void DownloadFile(Uri fileUri, ICredentials credentials, string localFileName)
{
using(var client = new WebClient())
{
client.Credentials = credentials;
client.DownloadFile(fileUri, localFileName);
}
}