最近對文檔庫的知識點進行了整理,也就有了這篇文章,當時查找這些接口,並用在實踐中,確實廢了一些功夫,也爲了讓更多的人走更少的彎路。html
sharepoint環境安裝過程當中幾點須要注意的地方web
Rest API的簡單應用json
WebHttpRequest在sharepoint文檔庫中的使用app
[sharepoint]Rest api相關知識(轉)asp.net
[sharepoint]修改Item或者File的Author和Editorpost
經過rest api上傳到sharepoint文檔庫。
上傳文件api
string strApi = "GetFolderByServerRelativeUrl('" + strFileServerRelativeUrl + "')/Files/Add(url='" + strFileName + "',overwrite=true)?$select=Name,ServerRelativeUrl,TimeCreated,TimeLastModified,Exists,Length";
strFileServerRelativeUrl:文件在sharepoint文檔庫中的相對路徑,好比:/server/libdoc11/test/.
strFileName:文件名稱。
overwrite:若是文件在文檔庫中已經存在,是否進行覆蓋。
$select:odata查詢關鍵字,進行篩選字段,這裏是在文件上傳成功後,返回該文件的相關信息。
文件下載api
string loadApi = "GetFileByServerRelativeUrl('" + serverRelativeUrl + "')/$value";
serverRelativeUrl:文件的相對路徑,好比:/server/libdoc11/test/1.txt
string strCopyApi = "GetFileByServerRelativeUrl('" + strSourceUrl + "')/copyto(strnewurl='" + strTargetUrl + "',boverwrite=true)";
strSourceUrl:拷貝文件的相對路徑,好比:/server/libdoc11/test/1.txt
strTargetUrl:目標路徑,好比:好比:/server/libdoc11/test2/1.txt
boverwrite:是否覆蓋
string strMoveToApi = "GetFileByServerRelativeUrl('" + strSourceUrl + "')/moveto(newurl='" + strTargetUrl + "',flags=1)";
strSourceUrl:拷貝文件的相對路徑,好比:/server/libdoc11/test/1.txt
strTargetUrl:目標路徑,好比:好比:/server/libdoc11/test2/1.txt
flags:1是否覆蓋
刪除文件的接口,與獲取文件的接口同樣,只不過區別在發送的請求不通,一個是get請求,一個是delete請求。
string queryFileApi = "GetFileByServerRelativeUrl('" + serverRelativeUrl + "')";
string strFileApi = "GetFolderByServerRelativeUrl('" + strFileServerRelativeUrl + "')/Files?$filter=Name eq '" + strFileName + "'&$select=Name,ServerRelativeUrl,TimeCreated,TimeLastModified,Exists,Length";
上面兩個都是能夠得,第二種是使用odata查詢$filter關鍵字進行篩選,文件名稱等於要刪除的文件名就能夠了,並返回刪除的文件信息。
string strFileApi = "GetFolderByServerRelativeUrl('" + strServerRelative + "')/Files?$orderby=TimeCreated desc&$select=Author/Title,ModifiedBy/Title,CheckInComment,Name,ServerRelativeUrl,TimeCreated,TimeLastModified,Exists,Length&$expand=Author/Title,ModifiedBy/Title"; string strFolderApi = "GetFolderByServerRelativeUrl('" + strServerRelative + "')/Folders?$filter=Name ne 'Forms'&$select=Name,ServerRelativeUrl,ItemCount";
上面的是獲取某個文檔庫的文件列表。並返回須要的屬性。下面的接口爲獲取全部的文件夾,固然能夠根據傳入的相對路徑,獲取子目錄中的全部文件夾,其中Forms爲默認隱藏的目錄,能夠將其過濾掉,這裏是篩選全部不文件夾名字不等於Forms的目錄。
注意
在返回文件的建立者與編輯者時,須要使用Author/Title,ModifiedBy/Tilte,由於Author與ModifiedBy在sharepoint端是User對象,而且這時候你會發現這樣仍不能正確的顯示建立者與編輯者,這時候就須要用到odata查詢的$expand關鍵字。
string strCreateFolderApi = "folders/add('" + serverRelativeUrl + "/" + folderName + "')";
serverRelativeUrl:相對路徑,就是要在哪兒建立文件夾。
各個請求請對號入座
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; namespace Wolfy.AngularJs { /// <summary> /// 請求輔助類 /// </summary> public class RequestHelper { private UserInfo _userInfo; private string _url; public RequestHelper(string url, UserInfo userInfo) { _url = url; _userInfo = userInfo; } /// <summary> /// 獲取站點contextInfo信息 /// </summary> /// <returns></returns> public string GetContextinfo() { HttpWebRequest contextInfoRequest = null; HttpWebResponse endpointResponse = null; StreamReader sr = null; string strJson = string.Empty; try { //獲取contextinfo contextInfoRequest = (HttpWebRequest)HttpWebRequest.Create(_url + "/_api/contextinfo"); contextInfoRequest.Method = "POST"; contextInfoRequest.Credentials = new NetworkCredential(_userInfo.Itcode, _userInfo.Pwd, _userInfo.Doamin); contextInfoRequest.Accept = "application/json;odata=verbose"; contextInfoRequest.ContentLength = 0; using (endpointResponse = (HttpWebResponse)contextInfoRequest.GetResponse()) { using (sr = new StreamReader(endpointResponse.GetResponseStream(), Encoding.UTF8)) { strJson = sr.ReadToEnd(); JObject jobj = JObject.Parse(strJson); return jobj["d"]["GetContextWebInformation"]["FormDigestValue"].ToString(); } } } catch (Exception ex) { throw ex; } } /// <summary> /// 建立文件夾 /// </summary> /// <param name="strName">要建立文件夾的相對路徑</param> /// <returns></returns> public string CreateFolder(string serverRelativeUrl) { string strJson = string.Empty; Uri hostWebUri = new Uri(_url); HttpWebResponse response = null; StreamReader sr = null; HttpWebRequest request = null; try { string metadata = "{'__metadata': { 'type': 'SP.Folder' },'ServerRelativeUrl':'" + serverRelativeUrl + "'}"; byte[] buffer = Encoding.UTF8.GetBytes(metadata); request = (HttpWebRequest)HttpWebRequest.Create(_url + "/_api/web/folders"); request.Method = "POST"; request.Credentials = new NetworkCredential(_userInfo.Itcode, _userInfo.Pwd, _userInfo.Doamin); request.Accept = "application/json;odata=verbose"; request.ContentLength = buffer.Length; request.ContentType = "application/json;odata=verbose"; request.Headers.Add("X-RequestDigest", this.GetContextinfo()); using (Stream requestStream = request.GetRequestStream()) { requestStream.Write(buffer, 0, buffer.Length); } using (response = (HttpWebResponse)request.GetResponse()) { using (sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8)) { strJson = sr.ReadToEnd(); } } } catch (WebException ex) { throw ex; } return strJson; } /// <summary> /// 修改文件夾 /// </summary> /// <param name="strAPI"></param> /// <returns></returns> public string UpdateFolder(string folderRelativeUrl, string strName) { string strJson = string.Empty; Uri hostWebUri = new Uri(_url); HttpWebResponse response = null; StreamReader sr = null; HttpWebRequest request = null; try { string metadata = "{'__metadata': {'type': 'SP.Folder'},'Name':'" + strName + "','ServerRelativeUrl':'" + folderRelativeUrl + "'}"; byte[] buffer = Encoding.UTF8.GetBytes(metadata); request = (HttpWebRequest)HttpWebRequest.Create(_url + "/_api/web/GetFolderByServerRelativeUrl('" + folderRelativeUrl + "')"); request.Method = "POST"; request.Credentials = new NetworkCredential(_userInfo.Itcode, _userInfo.Pwd, _userInfo.Doamin); request.Accept = "application/json;odata=verbose"; request.ContentLength = buffer.Length; request.ContentType = "application/json;odata=verbose"; request.Headers.Add("IF-MATCH", "*"); request.Headers.Add("X-HTTP-Method", "MERGE"); request.Headers.Add("X-RequestDigest", this.GetContextinfo()); using (Stream requestStream = request.GetRequestStream()) { requestStream.Write(buffer, 0, buffer.Length); } using (response = (HttpWebResponse)request.GetResponse()) { using (sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8)) { strJson = sr.ReadToEnd(); } } } catch (WebException ex) { throw ex; } return strJson; } /// <summary> /// 移除文件 /// </summary> /// <param name="fileRelativeUrl"></param> /// <returns></returns> public string RemoveFile(string fileRelativeUrl) { string strJson = string.Empty; Uri hostWebUri = new Uri(_url); HttpWebResponse response = null; StreamReader sr = null; HttpWebRequest request = null; try { request = (HttpWebRequest)HttpWebRequest.Create(_url + "/_api/web/GetFileByServerRelativeUrl('" + fileRelativeUrl + "')"); request.Method = "POST"; request.Credentials = new NetworkCredential(_userInfo.Itcode, _userInfo.Pwd, _userInfo.Doamin); request.Accept = "application/json;odata=verbose"; request.ContentLength = 0; request.ContentType = "application/json;odata=verbose"; request.Headers.Add("IF-MATCH", "*"); request.Headers.Add("X-HTTP-Method", "DELETE"); request.Headers.Add("X-RequestDigest", this.GetContextinfo()); using (response = (HttpWebResponse)request.GetResponse()) { using (sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8)) { strJson = sr.ReadToEnd(); } } } catch (WebException ex) { throw ex; } return strJson; } /// <summary> /// 文件移動或者拷貝 /// </summary> /// <param name="strAPi"></param> /// <returns></returns> public string CopyOrMoveTo(string strAPi) { string strJson = string.Empty; Uri hostWebUri = new Uri(_url); HttpWebResponse response = null; StreamReader sr = null; HttpWebRequest request = null; try { request = (HttpWebRequest)HttpWebRequest.Create(_url + "/_api/web/" + strAPi); request.Method = "POST"; request.Credentials = new NetworkCredential(_userInfo.Itcode, _userInfo.Pwd, _userInfo.Doamin); request.Accept = "application/json;odata=verbose"; request.ContentLength = 0; request.ContentType = "application/json;odata=verbose"; using (response = (HttpWebResponse)request.GetResponse()) { using (sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8)) { strJson = sr.ReadToEnd(); } } } catch (WebException ex) { throw ex; } return strJson; } /// <summary> /// 上傳文件 /// </summary> /// <param name="strApi"></param> /// <param name="data"></param> /// <returns></returns> public string PostFile(string strApi, byte[] data) { string strJson = string.Empty; Uri hostWebUri = new Uri(_url); HttpWebResponse fielResponse = null; StreamReader sr = null; HttpWebRequest fileRequest = null; try { fileRequest = (HttpWebRequest)HttpWebRequest.Create(_url + "/_api/web/" + strApi); fileRequest.Method = "POST"; fileRequest.Credentials = new NetworkCredential(_userInfo.Itcode, _userInfo.Pwd, _userInfo.Doamin); fileRequest.Accept = "application/json;odata=verbose"; fileRequest.ContentLength = data.Length; fileRequest.Headers.Add("X-RequestDigest", this.GetContextinfo()); using (Stream requestStream = fileRequest.GetRequestStream()) { requestStream.Write(data, 0, data.Length); } using (fielResponse = (HttpWebResponse)fileRequest.GetResponse()) { using (sr = new StreamReader(fielResponse.GetResponseStream(), Encoding.UTF8)) { strJson = sr.ReadToEnd(); } } } catch (WebException ex) { throw ex; } return strJson; } /// <summary> /// 下載文件 /// </summary> /// <param name="apiUrl">下載文件的api</param> /// <param name="filePath">在服務端保存的路徑</param> /// <returns></returns> public void DownLoadFile(string apiUrl, string filePath) { byte[] buffer = null; Uri hostWebUri = new Uri(_url); try { //下載的時候避免重名文件進行覆蓋 if (File.Exists(filePath)) { File.Delete(filePath); } HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(_url + "/_api/web/" + apiUrl); request.Method = "GET"; request.Credentials = new NetworkCredential(_userInfo.Itcode, _userInfo.Pwd, _userInfo.Doamin); request.Accept = "application/json;odata=verbose"; request.ContentType = "application/octet-stream"; using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { using (Stream stream = response.GetResponseStream()) { using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite)) { int bufferSize = 1024; //緩衝 buffer = new byte[bufferSize]; //真實讀取的大小 int length = stream.Read(buffer, 0, bufferSize); while (length > 0) { fs.Write(buffer, 0, length); length = stream.Read(buffer, 0, bufferSize); } } } } } catch (Exception ex) { throw ex; } } /// <summary> /// get請求 /// </summary> /// <returns></returns> public string RequestGet(string strApi) { string strJson = string.Empty; Uri hostWebUri = new Uri(_url); HttpWebRequest endpointRequest = null; HttpWebResponse endpointResponse = null; StreamReader sr = null; try { strApi = _url + "/_api/web/" + strApi; endpointRequest = (HttpWebRequest)HttpWebRequest.Create(strApi); endpointRequest.Credentials = new NetworkCredential(_userInfo.Itcode, _userInfo.Pwd, _userInfo.Doamin); endpointRequest.Method = "GET"; endpointRequest.Accept = "application/json;odata=verbose"; using (endpointResponse = (HttpWebResponse)endpointRequest.GetResponse()) { using (sr = new StreamReader(endpointResponse.GetResponseStream(), Encoding.UTF8)) { strJson = sr.ReadToEnd(); } } } catch (Exception ex) { throw ex; } return strJson; } } }
其中url爲文檔庫的站點地址,好比文檔庫DocLib10的地址爲Http://www.bb.com/site/DocLib10/AllItems.aspx.則Url爲Http://www.bb.com/site/DocLib10。
最後再奉上一個查詢某個文檔庫信息的接口
string strDocApi = "lists?$filter=((EntityTypeName eq '" + strEntityName + "' or substringof('" + strEntityName + "',DocumentTemplateUrl)) and BaseTemplate eq 101)&$select=Id,EntityTypeName,ParentWebUrl,Title,BaseTemplate";
使用odata查詢,文檔庫的BaseTemplate爲101,這樣也能夠獲取全部的文檔庫列表。
substringof函數爲:屬性值中包含某個字符串。以該接口爲例,DocumentTemplateUrl中包含strEntityName的文檔庫。
這裏將查詢到的,以及用到的接口總結在這裏。在使用的時候,各類參數致使的請求失敗,當時頭都大了。而msdn上面大多都是js的,並且沒有詳細的demo,只能一個個的嘗試。經過文檔庫的rest api對sharepoint中的List,Item也有一個瞭解,知道一些操做該去怎麼實現。使用場景:移動端集成sharepoint。
參考
http://www.cnblogs.com/PurpleTide/archive/2010/12/21/1912395.html