Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 按名称从sharepoint获取文件url_C#_Sharepoint_Sharepoint 2010_Sharepoint Online - Fatal编程技术网

C# 按名称从sharepoint获取文件url

C# 按名称从sharepoint获取文件url,c#,sharepoint,sharepoint-2010,sharepoint-online,C#,Sharepoint,Sharepoint 2010,Sharepoint Online,我能够在Sharepoint文档中保存文档。保存文档后,我希望能够获取该文档的url,以便与用户共享该url 这是我用来保存文档的代码: 使用(ClientContext ClientContext=new ClientContext(“https://mydomain.sharepoint.com")) { SecureString密码=新SecureString(); foreach(mypassword.ToCharArray()中的字符c)passWord.AppendChar(c);

我能够在Sharepoint文档中保存文档。保存文档后,我希望能够获取该文档的url,以便与用户共享该url

这是我用来保存文档的代码:

使用(ClientContext ClientContext=new ClientContext(“https://mydomain.sharepoint.com"))
{
SecureString密码=新SecureString();
foreach(mypassword.ToCharArray()中的字符c)passWord.AppendChar(c);
clientContext.Credentials=新的SharePointOnlineCredentials(“myaccount@mydomain.com“,密码);
Web=clientContext.Web;
FileCreationInformation newFile=新文件CreationInformation();
//newFile.Content=System.IO.File.ReadAllBytes(文件路径);
字节[]docData=null;
字节[]缓冲区=新字节[16*1024];
使用(MemoryStream ms=new MemoryStream())
{
int-read;
而((read=fileStream.read(buffer,0,buffer.Length))>0)
{
ms.Write(缓冲区,0,读取);
}
docData=ms.ToArray();
}
newFile.Content=docData;
Url=originalFileName;
列表文档=web.Lists.GetByTitle(“文档”);
Microsoft.SharePoint.Client.File uploadFile=docs.RootFolder.Files.Add(新文件);
clientContext.ExecuteQuery();
}

我如何在上传文档后获取该文档的URL

要获取上传文件的url,可以利用以下属性:

  • EncodedAbsUrl
    -获取文件的绝对url
  • EncodedAbsUrl
    -获取文件的服务器相对url
文件上传后,他们需要明确请求,如下所示:

var uploadFile = list.RootFolder.Files.Add(fileInfo);
ctx.Load(uploadFile.ListItemAllFields,item => item["EncodedAbsUrl"], item => item["FileRef"]);
ctx.ExecuteQuery();
范例

var fileInfo = new FileCreationInformation();
fileInfo.Content = System.IO.File.ReadAllBytes(filePath);
fileInfo.Url = Path.GetFileName(filePath);

var list = ctx.Web.Lists.GetByTitle(listTitle);
var uploadFile = list.RootFolder.Files.Add(fileInfo);
ctx.Load(uploadFile.ListItemAllFields,item => item["EncodedAbsUrl"], item => item["FileRef"]);
ctx.ExecuteQuery();

Console.WriteLine(uploadFile.ListItemAllFields["EncodedAbsUrl"]);
Console.WriteLine(uploadFile.ListItemAllFields["FileRef"]);
更新

要获取文档显示表单的url,您可以

ctx.Load(list, l => l.DefaultDisplayFormUrl);
ctx.Load(uploadFile.ListItemAllFields,item => item.Id);
ctx.Load(ctx.Site, s => s.Url);
ctx.ExecuteQuery();

var itemUrl = String.Format("{0}{1}?ID={2}",ctx.Site.Url,list.DefaultDisplayFormUrl, uploadFile.ListItemAllFields.Id);

要获取上载文件的url,您可以利用以下属性:

  • EncodedAbsUrl
    -获取文件的绝对url
  • EncodedAbsUrl
    -获取文件的服务器相对url
文件上传后,他们需要明确请求,如下所示:

var uploadFile = list.RootFolder.Files.Add(fileInfo);
ctx.Load(uploadFile.ListItemAllFields,item => item["EncodedAbsUrl"], item => item["FileRef"]);
ctx.ExecuteQuery();
范例

var fileInfo = new FileCreationInformation();
fileInfo.Content = System.IO.File.ReadAllBytes(filePath);
fileInfo.Url = Path.GetFileName(filePath);

var list = ctx.Web.Lists.GetByTitle(listTitle);
var uploadFile = list.RootFolder.Files.Add(fileInfo);
ctx.Load(uploadFile.ListItemAllFields,item => item["EncodedAbsUrl"], item => item["FileRef"]);
ctx.ExecuteQuery();

Console.WriteLine(uploadFile.ListItemAllFields["EncodedAbsUrl"]);
Console.WriteLine(uploadFile.ListItemAllFields["FileRef"]);
更新

要获取文档显示表单的url,您可以

ctx.Load(list, l => l.DefaultDisplayFormUrl);
ctx.Load(uploadFile.ListItemAllFields,item => item.Id);
ctx.Load(ctx.Site, s => s.Url);
ctx.ExecuteQuery();

var itemUrl = String.Format("{0}{1}?ID={2}",ctx.Site.Url,list.DefaultDisplayFormUrl, uploadFile.ListItemAllFields.Id);

您可以使用以下三种方法之一。若要共享文档,您可以生成匿名链接、带有过期日期的非链接或共享并通过电子邮件发送

List docs = web.Lists.GetByTitle("DOCUMENTS");
Microsoft.SharePoint.Client.File uploadFile = docs.RootFolder.Files.Add(newFile);
clientContext.ExecuteQuery();

clientContext.Load(uploadFile.ListItemAllFields, item => item["EncodedAbsUrl"]);
clientContext.ExecuteQuery();

var fileUrl = uploadFile.ListItemAllFields["EncodedAbsUrl"].ToString();

string link = clientContext.Web.CreateAnonymousLinkForDocument(fileUrl, ExternalSharingDocumentOption.View);

string linkwithExpiration = clientContext.Web.CreateAnonymousLinkWithExpirationForDocument(fileUrl, ExternalSharingDocumentOption.Edit, DateTime.Now.AddMonths(1));

SharingResult result = clientContext.Web.ShareDocument(fileUrl, "someone@example.com", ExternalSharingDocumentOption.View, true, "Doc shared programmatically");
确保已启用外部共享功能


参考-

您可以使用以下三种方法之一。若要共享文档,您可以生成匿名链接、带有过期日期的非链接或共享并通过电子邮件发送

List docs = web.Lists.GetByTitle("DOCUMENTS");
Microsoft.SharePoint.Client.File uploadFile = docs.RootFolder.Files.Add(newFile);
clientContext.ExecuteQuery();

clientContext.Load(uploadFile.ListItemAllFields, item => item["EncodedAbsUrl"]);
clientContext.ExecuteQuery();

var fileUrl = uploadFile.ListItemAllFields["EncodedAbsUrl"].ToString();

string link = clientContext.Web.CreateAnonymousLinkForDocument(fileUrl, ExternalSharingDocumentOption.View);

string linkwithExpiration = clientContext.Web.CreateAnonymousLinkWithExpirationForDocument(fileUrl, ExternalSharingDocumentOption.Edit, DateTime.Now.AddMonths(1));

SharingResult result = clientContext.Web.ShareDocument(fileUrl, "someone@example.com", ExternalSharingDocumentOption.View, true, "Doc shared programmatically");
确保已启用外部共享功能


参考-

谢谢瓦迪姆。获取公共访问的Url如何?谢谢again@Laziale,我可能误解了您的问题,但如果“公共访问”指的是文件的共享链接,则有一个特定的类可用于该问题,但SharePoint 2010版本的数据库Vadim不支持该类,那么“共享链接”如何?如果SharePoint版本为2013,我们使用的是SharePoint online版本的数据库Vadim。获取公共访问的Url如何?谢谢again@Laziale,我可能误解了你的问题,但如果“公共访问”指的是文件的共享链接,则有一个特定的类可用于该问题,但SharePoint 2010版本的Anks Vadim不支持该类,那么“共享链接”如何如果SharePoint版本为2013,我们将使用SharePoint online版本的Ank you,非常有帮助,您知道吗,我发现这些错误看起来像是您在旧版本的CSOM上使用的。从nuget或从下载最新版本,并在项目中引用。程序集版本需要是
16.x.x.x
。此外,请检查如何一步一步地执行此操作。谢谢,请给我几分钟时间。我有当前版本16.1.0.0,但仍然是相同的@Gautam thx,以获得您的帮助。在从链接安装该版本后,我现在实际遇到了更多错误,例如无法识别此方法GetAuthenticationCookie谢谢,非常有用,您知道我遇到的这些错误看起来像是您在旧版本的CSOM上使用的。从nuget或从下载最新版本,并在项目中引用。程序集版本需要是
16.x.x.x
。此外,请检查如何一步一步地执行此操作。谢谢,请给我几分钟时间。我有当前版本16.1.0.0,但仍然是相同的@Gautam thx,以获得您的帮助。在通过链接安装该版本后,我现在实际上遇到了更多错误,例如无法识别此方法GetAuthenticationCookie