【SharePoint Online】ファイルのダウンロードリンクを生成する【Download.aspx】【PowerShell】

今回はSPO上に配置してあるファイルのダウンロードリンクを作成する方法を説明していきます。
このリンクをハイパーリンク列などに配置しておけば、
Officeファイルなどのアイテムを直接ダウンロードすることができます。

それでは行きましょう。

GetFileByServerRelativeUrlを利用する

実はSharePoint REST APIのGetFileByServerRelativeUrlでダウンロードすることができます。
コードは以下です。

https://{テナント}.sharepoint.com/sites/{サイト名}/_api/web/GetFileByServerRelativeUrl('/sites/lib/sample.aspx')/$value 

ですが、私の環境で行うとファイル名が「$value」となってしまいます。

因みにIEではダウンロードすることすらできません。
→IEではREST APIが利用できないので。。。

Download.aspxを利用する

ということで、Download.aspxを利用します。
これは、通常のライブラリの「ダウンロード」ボタンと同じ動作になります。
Chromeで通信を監視すると確認することができます。

ソース内では[UniqueId]をクエリパラメータとしています。
ですが、別のクエリパラメータ[SorceURL]を利用することもできます。

https://{テナント}.sharepoint.com/sites/{サイト名}/_layouts/15/download.aspx?SourceUrl=https://{テナント}.sharepoint.com/sites/TestModern2/Shared%20Documents/test.docx

SorceURLの問題点

SourceURLは生成することは簡単ですが、これにも問題があります。
パスが長すぎるため、頻繁にURLが255文字以上になってしまうのです。
255文字以上になってしまうと、IEでは利用できません。

なのでやはりUniqueIdで利用する必要があるようです。。。

UniqueIdを探す

ではUniqueIdはどのようにして調べるのでしょうか。
私が調べる限りでは、UI上から取得することはできませんでした。残念。

ということでPowerShellで取得しましょう。
簡単ですがソースは以下です。

※急いで作ったものですので、Exportなどは適宣設定してください。

実行結果は以下となります。

早速取得したUniqueIdを利用してURLを作成してみましょう。

https://{テナント}.sharepoint.com/sites/{サイト名}/_layouts/15/download.aspx?UniqueId={54cc43ed-ed53-4e07-bbfd-6613cabadf69}

これでブラウザに関係なくダウンロードできるURLが作成されました。

終わりに

今回は以上です。
最初はJSON書式設定で色々頑張っていましたが、
ゴリ押しでなんとかなった感じです。。。

ではまた。