[C#.NET][Sharepoint 2013] 如何利用 CSOM 下載特定檔案
續上篇:http://www.dotblogs.com.tw/yc421206/archive/2014/06/03/145354.aspx
本文章節:
當清單裡面有一個檔案,可按下列步驟來下載檔案
- 搜尋檔案,var file = list.RootFolder.Files.GetByUrl("demo.docx")並取
- 得檔案路徑 file.ServerRelativeUrl
- 開啟檔案 Microsoft.SharePoint.Client.File.OpenBinaryDirect ,取得 Stream。
- 存檔。
程式碼如下:
{ using (ClientContext client = new ClientContext("http://sps2013/CsomApi")) { client.Credentials = new NetworkCredential("your account", "your password"); var site = client.Web; var list = site.Lists.GetByTitle("Documents"); var file = list.RootFolder.Files.GetByUrl("demo.docx"); client.Load(file); client.ExecuteQuery(); var fileInfo = Microsoft.SharePoint.Client.File.OpenBinaryDirect(client, file.ServerRelativeUrl); byte[] readbuffer = null; using (var memory = new MemoryStream()) { while (true) { byte[] buffer = new byte[1024]; var length = fileInfo.Stream.Read(buffer, 0, buffer.Length); if (length <= 0) { break; } memory.Write(buffer, 0, length); } memory.Seek(0, SeekOrigin.Begin); readbuffer = memory.ToArray(); } var targetStream = new FileStream("demo-1.docx", FileMode.Create, FileAccess.Write); targetStream.Write(readbuffer, 0, readbuffer.Length); targetStream.Dispose(); fileInfo.Dispose(); } }
欲想下載特殊版本,可按下列步驟來下載檔案
- 取得檔案 Versions,這裡會記錄舊的版本訊息,我會需要它的 Url 屬性
- 我找不到下載特殊版本的操作物件,所以先取得檔案路徑後,再用 HttpWebRequest 下載檔案,同樣可以達到下載特定版本的效果
程式碼如下:
{ using (ClientContext client = new ClientContext("http://sps2013/CsomApi")) { client.Credentials = new NetworkCredential("your account", "your password"); var site = client.Web; var list = site.Lists.GetByTitle("Documents"); var file = list.RootFolder.Files.GetByUrl("demo.docx"); var versions = file.Versions; client.Load(versions); client.ExecuteQuery(); var findVersion = versions.FirstOrDefault(o => o.VersionLabel == "1.0"); string url = client.Url + @"/" + findVersion.Url; HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(url); httpRequest.Credentials = new NetworkCredential("your account", "your password"); HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse(); Stream sourceStream = httpResponse.GetResponseStream(); byte[] buffer = new byte[8 * 1024]; FileStream targetStream = new FileStream("demo-1.docx", FileMode.Create, FileAccess.Write); int size = 0; do { size = sourceStream.Read(buffer, 0, buffer.Length); if (size > 0) targetStream.Write(buffer, 0, size); } while (size > 0); targetStream.Close(); httpResponse.Close(); } }
版本歷程訊息如下圖:
本文出自:http://www.dotblogs.com.tw/yc421206/archive/2014/06/03/145357.aspx
若有謬誤,煩請告知,新手發帖請多包涵
Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET