Microsoft 把許多服務的 API 都慢慢整合到自家推出的 Microsoft Graph 中,包含整個 Microsoft 365 提供的服務等等,未來串接 Microsoft 的服務會越來越容易。
# 取得 Graph Service Client
首先新增一個 Class,繼承 IAuthenticationProvider,用作 GraphServiceClient 呼叫 Graph API 時提供 Authentication 資訊使用。
接著用下面的 function 即可取得 Graph Service Client,後續要操作 Graph API 的內容都是用這個 Client 了。
# 檔案屬性
OneDrive DriveItem 物件的屬性說明在以下文件中,
OneDrive API 與 Google Drive API之間有很大的不同, OneDrvie API 查詢檔案需要帶上檔案所在的雲端硬碟 DriveId 加上 DriveItemId,這兩個屬性是非常重要的,接下來會一步一步的把基本會用到的 function 介紹給各位。
# Drive — [文件連結]
取得登入使用者的雲端硬碟資料
## Get Me Drive | 取得使用者自身的雲端
Me Drive 會直接指向登入使用者的“我的檔案”。
## Get All Drives | 取得所有雲端硬碟
列出所有使用者可讀取的雲端硬碟
## Get Drive By DriveId | 尋找指定雲端硬碟資訊
用 DriveId 去查詢特定的雲端硬碟。
# DriveItem — [文件連結]
DriveItem 是 OneDrive 中代表所有物件(資料夾、檔案)的 Class,也只有 DriveItem Class 內有雲端中的檔案資料,所以要取得檔案要用下面的程式,先從 Drive 物件中取得 Root(DriveItem),才能從 root 取得根目錄中的資料內容。
## List Drive’s Root Items | 列出根目錄下的檔案清單
取出 DriveItem 後,要判斷是哪種檔案需要看 DriveItem 下的欄位:
- Folder、File、Image、Photo
哪個欄位有值就帶表此 DriveItem 是該種類的檔案。
此外,取出 DriveItem 後會發現有許多欄位是 null,原因與 GoogleDrive 一樣,需要的欄位資訊需要在查詢時帶入,雲端才會回傳給你。
這就需要提到 OneDrive 的 OData system query options,詳細內容請前往以下文件。
OData query options 包含以下幾個動作:
- $expand : 指定將物件的某 Relation 欄位內容加入,如: children
- $select : 指令將物件的某 Property 欄位內容加入,如: deleted
- $filter : 將回傳的物件依照條件過濾,[文件連結]
- $search : 依照指定條件查詢雲端檔案,[文件連結]
- $orderBy : 依照指定欄位值將物件清單排序,[文件連結]
- $format : 指定 Graph 回傳使用的格式,如 atom、xml、 json,但不保證所有檔案都會依照此格式回傳。
- $count : 此欄位為 bool,指明是否統計經過進階查詢後找出的檔案數量。
- $skip、 $top : 分頁用途。
各位有需求就自由發揮,接下來我繼續介紹幾個基本的功能。
## List DriveItem Children | 列出資料夾下的檔案清單
從 root 找到某個 folder 的 driveItem id 後,就可以把他的 id 帶進來繼續往下看這個 folder 下面有哪些檔案。
## 取得指定 DriveItem 資訊
補上兩個取得單一 DriveItem 資訊的程式。
## Create Folder | 建立資料夾
首先新增一個物件用於發送建立請求。
下面的 function 會將 request.Name 設為資料夾的名稱,設定發生衝突的行為是 “rename” 則不會覆蓋原資料夾,並將資料夾創建在指定 Drive 中的 DriveItem 下,若 DriveItemId 為空,則創建在 Drive 的 root 下。
## Update DriveItem | 修改名稱/移動 雲端檔案
修改檔名 or 移動檔案 or 兩個都做的更新程式如下。
## Delete DriveItem | 刪除 DriveItem
## Download DriveItem | 下載 DriveItem
## Upload Item | 上傳檔案
上傳檔案分為兩種,一種是上傳小於 250MB 的小檔案,另一種是上傳大於 250MB 的大檔案。
上傳小檔案須自己送 http request,又依照是否為取代現有檔案或上傳新檔案而分為兩組 uri,所以需要讀者自行前往文件選擇要使用哪組。
我這邊簡單用一組作為範例,將檔案上傳到指定 itemId 的資料夾中。
上傳大檔案的做法是將檔案切片變成好幾塊,一部份一部份上傳,透過 session 去做各個檔案上傳的管理,這一部份 library 可以呼叫。
OneDrive API 串接的內容就到這邊結束啦,因為內容很多沒辦法所有細節都帶到,也沒有畫面來配合需求開發規劃 api 要怎麼開,所以整個系列都採用介紹基本作法的邏輯來寫,希望讀者看到一半就能有感覺,快速地上手,剩下有其他的需求能在文件中找到答案(真心覺得 Microsoft 的文件不好看懂QQ),有其他疑問歡迎留言討論~謝謝各位。