【PHP】Google Drive API 共有フォルダの場合

2021年3月20日

前の記事でGoogleのAPIを使用してファイルのアップロードをしましたが、共有フォルダーの場合はコードの追加が必要になります。

共有ドライブへリクエストするときの専用パラメーターが存在する

https://developers.google.com/drive/api/v3/enable-shareddrives

公式ドキュメントによると supportsAllDrives=true を付与することで共有ドライブへアクセスを前提としたアプリケーションであることをGoogleDrive側へ通知できるようです。
このパラメーターをリクエスト時に付与してあげれば共有ドライブを操作できるようになるわけです。

フォルダー作成のリクエスト、ファイル作成のリクエストにコードを追加します。

追加するパラメーター

 "includeTeamDriveItems" => true,
 "supportsTeamDrives" => true,

また共有フォルダにアクセスするときはteamDriveIdが必須になります。

共有フォルダのrootフォルダのIDを指定します。

         $fileMetadata = new Google_Service_Drive_DriveFile(array(
                    'name' => $fileName,
                    'parents' => array($folderId),
                    'teamDriveId' => '$drive_id' //共有フォルダのrootフォルダ
            ));

ファイルの作成

        $file = $driveService->files->create($fileMetadata, array(
                'data' => $content,
                'mimeType' => $mime,
                'mimeType' => 'application/x-gzip',
                'uploadType' => 'multipart',
                'includeTeamDriveItems' => true,
                'supportsTeamDrives' => true, 
                'fields' => 'id'));

フォルダの作成

$file = $driveService->files->create($fileMetadata,array(
     'fields'=>'id,name,parents',
     'includeTeamDriveItems' => true,
     'supportsTeamDrives' => true, 
));

自分のドライブではうまく行ったのに、共有フォルダをしてしたら404 親フォルダが見つかりませんエラーがでて、解決に4時間位かかったため、忘備録として記録しました。

誰かの助けになれば幸いです。



GCP,PHP

Posted by Next-k