Power Automate for 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 マップを使う。

    「「新しい Google マップ」正式公開、地図大きく、精緻すぎる3D…

  2. Power Automate for desktop

    Power Automate DesktopでPPAPしてみた。

    PPAP、所謂パスワード付きZipをメールに添付して、そのメールとは別…

  3. Google関連

    【2018年9月版】Google API ConsoleでクライアントIDとクライアントシークレット…

    GoogleのAPIを呼び出すにあたり、クライアントIDとクライアント…

  4. Google関連

    Google Sheets API v4が登場しました。

    「Google Apps Developer Blog: New wa…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP