按名称从共享点获取文件 url
Get file url from sharepoint by name
我可以将文档保存在 Sharepoint 文档中。保存文档后,我希望能够获取该文档的 url,以便与用户共享 url。
这是我用来保存文档的代码:
using (ClientContext clientContext = new ClientContext("https://mydomain.sharepoint.com"))
{
SecureString passWord = new SecureString();
foreach (char c in "mypassword".ToCharArray()) passWord.AppendChar(c);
clientContext.Credentials = new SharePointOnlineCredentials("myaccount@mydomain.com", passWord);
Web web = clientContext.Web;
FileCreationInformation newFile = new FileCreationInformation();
//newFile.Content = System.IO.File.ReadAllBytes(filePath);
byte[] docData = null;
byte[] buffer = new byte[16 * 1024];
using (MemoryStream ms = new MemoryStream())
{
int read;
while ((read = fileStream.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
}
docData = ms.ToArray();
}
newFile.Content = docData;
newFile.Url = originalFileName;
List docs = web.Lists.GetByTitle("DOCUMENTS");
Microsoft.SharePoint.Client.File uploadFile = docs.RootFolder.Files.Add(newFile);
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);
您可以使用以下 3 种方法中的任何一种。要共享文档,您可以生成匿名 link、带有到期日期的匿名 link 或共享并通过电子邮件发送。
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");
确保外部共享功能已打开。
我可以将文档保存在 Sharepoint 文档中。保存文档后,我希望能够获取该文档的 url,以便与用户共享 url。
这是我用来保存文档的代码:
using (ClientContext clientContext = new ClientContext("https://mydomain.sharepoint.com"))
{
SecureString passWord = new SecureString();
foreach (char c in "mypassword".ToCharArray()) passWord.AppendChar(c);
clientContext.Credentials = new SharePointOnlineCredentials("myaccount@mydomain.com", passWord);
Web web = clientContext.Web;
FileCreationInformation newFile = new FileCreationInformation();
//newFile.Content = System.IO.File.ReadAllBytes(filePath);
byte[] docData = null;
byte[] buffer = new byte[16 * 1024];
using (MemoryStream ms = new MemoryStream())
{
int read;
while ((read = fileStream.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
}
docData = ms.ToArray();
}
newFile.Content = docData;
newFile.Url = originalFileName;
List docs = web.Lists.GetByTitle("DOCUMENTS");
Microsoft.SharePoint.Client.File uploadFile = docs.RootFolder.Files.Add(newFile);
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);
您可以使用以下 3 种方法中的任何一种。要共享文档,您可以生成匿名 link、带有到期日期的匿名 link 或共享并通过电子邮件发送。
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");
确保外部共享功能已打开。