質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

0回答

1056閲覧

LaravelからGoogleAppsScriptを使って、GoogleDriveにファイルを保存させたい。

dicedili

総合スコア0

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2021/09/09 08:37

編集2021/10/13 11:08

前提・実現したいこと

LaravelとGoogleAppsScriptを使って、GoogleDriveにファイルを保存させる仕組みを作ろうと考えています。
しかし、LaravelからGoogleAppsScriptへ受け渡したファイルがcreateFile()でGoogleDriveにアップロードされません。
何故ファイルがアップロードされないのでしょうか。

該当のソースコード

--file_upload.blade.php <!DOCTYPE html> <html lang="{{ str_replace('_', '-', app()->getLocale()) }}"> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> </head> <body> <div id="myform" style="text-align:center;"> ファイルを選択してからアップロードしてください(10MBまで)<br><br> <form action="{{action('FileUploadController@fileUpload')}}" method="POST" enctype="multipart/form-data"> @csrf <input type="file" id="myFile" name="myFile" multiple/> <input type="submit" id="upload" value="アップロード" /> </form> <div id="progress"></div> </div> </body> </html>
—-FileUploadController.php— class FileUploadController extends Controller { public function fileUpload(Request $request) { $file=$request->file('myFile'); // ファイルアップロードAPI呼び出し $client = new \GuzzleHttp\Client(); $base_url = 'https://script.google.com/macros/s/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/exec'; try { $res = $client->post( $base_url, [\GuzzleHttp\RequestOptions::JSON => [ 'file' => $file, ]]); } catch (Exception $e) { var_dump("Exception!:"); return view('file_upload'); } return view('thanks_for_upload'); } }
—GoogleAppsScript function doPost(e) { // 引数で送られてきたパラメータを取得する var c = e.postData.contents var contents = JSON.parse(c) // パラメーターをそれぞれの変数に格納 var myfile = contents.file; const folderID=‘YYYYYYYYYYYYYYYYYYYYYY’; var uploadFolder = DriveApp.getFolderById(folderID); var driveFile = uploadFolder.createFile(myfile);//アップロード return driveFile.getUrl(); }

補足情報(FW/ツールのバージョンなど)

Laravel:8.53.0
PHP:7.49

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AbeTakashi

2021/09/09 10:27

第三者から見ると情報が断片的かつ少なすぎて、答えが出そうにないですね。doPost(e)がどこからどのように呼ばれるのかも分かりませんし。情報を出すなら省略せずに出せるところは全部出した方が良いと思います。もしくはご自分で原因の切り分けをして、問題が起きてるところをピンポイントであげて頂くか。PHPなのかHTML(blade)なのかJSなのか? くらいまで絞れるとよいのですが。 あとはクライアントやサーバ側のログも怪しいところがないかを確認してみてください。これで原因が分かれば対応して頂ければ良いですし、ログを見ても不明ならこちらも質問文に追加してください。
dicedili

2021/09/13 07:27

説明不足ですいません。 FileUploadController.php内の$client->postで、GoogleAppsScriptのdoPost(e)を呼び出しています。 doPost(e)内のcreateFile(myfile)ではなく、同名別引数のcreateFile(name, content)で、新規のテキストファイルを作成してアップロードすることができました。 しかし、createFile(myfile)で、画面から受け取ったファイルがアップロードできませんでした。引数として受け渡すデータの形式が悪いのだろうとあたりをつけているのですが、どういった形で受け渡せばいいのかが、わかりませんでした。
AbeTakashi

2021/09/13 08:40

すいません、GoogleAppsScriptなのでdoPostが呼ばれるんですね。ちょっと勘違いしておりました。申し訳ありません。 createFileはおそらくBLOB形式で受け渡すと思うので、myfileがBLOB形式になってるかを念のため確認するといいと思います。 参考) https://qiita.com/a_eau_/items/01bc14bfc5cb5ef12e64
dicedili

2021/10/13 11:00

回答が遅くなり申し訳ございませんでした。 GASでBlob形式に変換について、検証しております。 ご返答いただきありがとうございました。
dicedili

2021/10/15 05:27

Blob形式に変換しようと、下記のように書き換えました。 var blob = myfile.getBlob(); var driveFile = uploadFolder.createFile(blob);//アップロード しかし、myfile.getBlob()でエラーとなり、エラーログでは、「TypeError: Cannot read property 'getBlob' of undefined」とのメッセージで、getBlob()がメソッドとして認識されていないようでした。 これは、Laravel側から受け渡されてきたmyfileが既に正しく無い形式であったということでしょうか。 GASへ受け渡す前にLaravel側で何か処置を行えばよいのでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問