从Sharepoint中的特定库下载文件

时间:2016-09-06 13:31:16

标签: c# visual-studio sharepoint

我有一个简单的控制台应用程序,可以将文件从本地文件夹上传到sharepoint中的库,还有一个方法可以下载该文件夹,但是使用在网站中手动激活的URL。但是我需要下载我上传一秒钟的同一个文件,这是一个测试,我需要的是激活下载的“查看链接”。这是我的上传方法:

  static void o365SaveBinaryDirect(ClientContext o365Context, string o365LibraryName, string o365FilePath, string o365FileName) {

        Web o365Web = o365Context.Web;
        if (!LibraryExist(o365Context, o365Web, o365LibraryName)) {
            CreateLibrary(o365Context, o365Web, o365LibraryName);
        }
        using (FileStream o365FileStream = new FileStream(o365FilePath, FileMode.Open)) {
            Microsoft.SharePoint.Client.File.SaveBinaryDirect(o365Context, string.Format("/{0}/{1}", o365LibraryName, o365FileName), o365FileStream, true);                
        }
    }

现在我有这种下载方法:

 private static void DownloadFile(string webUrl, ICredentials credentials, string fileRelativeUrl) {
        using (var client = new WebClient()) {
            client.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
            client.Headers.Add("User-Agent: Other");
            client.Credentials = credentials;
            client.DownloadFile(webUrl, fileRelativeUrl);

        }
    }

我需要生成以后下载文件的网址。

1 个答案:

答案 0 :(得分:0)

一些建议:

以下示例演示了如何将文件上载到库中然后下载它:

var sourceFilePath = @"c:\in\UserGuide.pdf";  //local file path;
var listTitle = "Documents"; //target library;

var list = ctx.Web.Lists.GetByTitle(listTitle);
ctx.Load(list.RootFolder);
ctx.ExecuteQuery();

var targetFileUrl = string.Format("{0}/{1}", list.RootFolder.ServerRelativeUrl, Path.GetFileName(sourceFilePath));

//upload a file
using (var fs = new FileStream(sourceFilePath, FileMode.Open))
{
      Microsoft.SharePoint.Client.File.SaveBinaryDirect(ctx, targetFileUrl, fs, true);
}

//download a file
var downloadPath = @"c:\out\";
var fileInfo = Microsoft.SharePoint.Client.File.OpenBinaryDirect(ctx, targetFileUrl);
var fileName = Path.Combine(downloadPath, Path.GetFileName(targetFileUrl));
using (var fileStream = System.IO.File.Create(fileName))
{
      fileInfo.Stream.CopyTo(fileStream);
}