前回と前々回の記事でGoogle Drive APIの実行に必要なアクセストークンの取得まで行うことができました。
今回はいよいよPower Automate Desktop(PAD)でGoogle Driveの指定したフォルダにファイルをアップロードしてみようと思います。
Google Driveにファイルをアップロードするフロー(UploadGoogleDrive)
入力変数
アップロードするファイルのパスとアップロード先となるGoogle DriveのフォルダーのIDを入力変数として受け取ります。受け取ったフォルダーのIDが空だった場合はルートフォルダーにファイルをアップロードします。
フォルダーのIDについてはこちらのサイトをご参照ください。
- %TargetFilePath%
- %TargetFolderId%
1. 変数の設定
前回の記事で書いたアクセストークンを取得するフローの実行に必要なクライアントID(%ClientId%)、クライアントシークレット(%ClientSecret%)、トークンフォルダーのパス(%TokenFolderPath%)、スコープ(%Scopes%)、そしてエンドポイントのURI(%UploadURI%)を変数として設定します。
下記エンドポイントを見れば分かる通り、今回はマルチパートでアップロードを行います。
- %Scopes%:https://www.googleapis.com/auth/drive
- %UploadURI%:https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart
2. ファイルが存在する場合
アップロード対象のファイルが存在するかどうかを確認し、存在しない場合は「Err」ラベルに移動します。
3. Desktop フローを実行
前回作成したフロー(GetGoogleAccessToken)を実行し、アクセストークンを取得します。
エラー発生時の処理として「Err」ラベルに移動するようにします。
4. ファイル パス部分の取得
API実行時に必要となるファイル名をパスから取得します。
5. ランダム テキストの作成
上記の通り今回はマルチパート形式でファイルをアップロードするので、「ランダム テキストの作成」アクションを使ってboundary文字列を作成します。
6. PowerShell スクリプトの実行
下記PowerShellスクリプトでファイルをBase64エンコードし、結果を変数「%Base64%」として設定します。
[System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes("%TargetFilePath%"))
7. PowerShell スクリプトの実行
下記PowerShellスクリプトでファイルのMIMEタイプを取得し、結果を変数「%MIMEtype%」として設定します。
Add-Type -AssemblyName "System.Web" [System.Web.MimeMapping]::GetMimeMapping("%TargetFilePath%")
8. If
アップロード先フォルダーのIDが空の場合とそうでない場合で、アップロード先やファイル名を指定するためのJSON文字列を変更します。
・フォルダーIDが空の場合
{"name":"%FileName%", "mimeType":"%MIMEtype%"}
・フォルダーIDが空でない場合
{"name":"%FileName%", "mimeType":"%MIMEtype%", "parents":["%TargetFolderId%"]}
9. 変数の設定
POSTするデータを変数「%PostData%」として設定します。
--%boundary% content-type: application/json; charset=UTF-8 %JSON% --%boundary% Content-Type: Application/octet-stream Content-Transfer-Encoding: base64 %Base64% --%boundary%--
10. Web サービスを呼び出します
APIを実行し、ファイルをアップロードします。
・URL:%UploadURI%
・メソッド:POST
・受け入れる:application/json
・コンテンツ タイプ:
multipart/related; boundary="%boundary%"
・カスタム ヘッダー:
Authorization: Bearer %AccessToken%
・要求本文:%PostData%
・応答を保存します:テキストを変数に変換します (Web ページ用)
・要求本文をエンコードします:オフ
11. If
「Web サービスを呼び出します」アクションが成功した場合(StatusCodeが200)は、フローを正常に停止します。
12. ラベル(Err)
処理の途中で失敗した場合はラベル「Err」に移動し、エラーメッセージを表示してフローを終了するようにします。
フロー全体
動作確認
新規フローを作成し「Desktop フローを実行」アクションで上記アクションの動作確認を行ってみます。
結果は下図の通りで、問題無くファイルがアップロードされることが確認できました。
この記事へのコメントはありません。