Power Automate Desktop

[Power Automate Desktop]Google Driveにファイルをアップロードするフロー

前回前々回の記事でGoogle Drive APIの実行に必要なアクセストークンの取得まで行うことができました。
今回はいよいよPower Automate Desktop(PAD)でGoogle Driveの指定したフォルダにファイルをアップロードしてみようと思います。

Google Driveにファイルをアップロードするフロー(UploadGoogleDrive)

入力変数

アップロードするファイルのパスとアップロード先となるGoogle DriveのフォルダーのIDを入力変数として受け取ります。受け取ったフォルダーのIDが空だった場合はルートフォルダーにファイルをアップロードします。
フォルダーのIDについてはこちらのサイトをご参照ください。

  1. %TargetFilePath%
  2. %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 フローを実行」アクションで上記アクションの動作確認を行ってみます。

結果は下図の通りで、問題無くファイルがアップロードされることが確認できました。

関連記事

[Power Automate Desktop]Google APIのアクセストークンを取得するフロー前のページ

「はじめてのPower Automate Desktop」レビュー次のページ

関連記事

  1. Google関連

    Google Docs API v1を試してみました。

    下記TechCrunchの記事によると、Google ドキュメントの新…

  2. Office関連

    Gmail APIを使ってメール送信するVBAマクロ(3)

    前回、前々回とGmail APIを扱ってきましたが、今回は前々回の記事…

  3. Google関連

    [Google Apps Script]Google アナリティクスのデータを取得する。

    拡張サービスの「Google Analytics API」を使って、G…

  4. Power Automate Desktop

    [Power Automate]クラウドフローとデスクトップフローとのファイル連携について

    前回の記事でクラウドフローとデスクトップフローの連携について紹介しまし…

コメント

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

Translate

Chinese (Simplified)Chinese (Traditional)EnglishFrenchGermanJapaneseKoreanRussianSpanish

最近の記事

アーカイブ

PAGE TOP