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

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

新規登録して質問してみよう
ただいま回答率
85.49%
Google ドライブ

Google ドライブは、Google社が提供するオンラインストレージサービス。オンラインストレージ上に、画像や動画、テキスト、Word/PDFのファイルなどさまざまなファイル保存することができます。また、他のユーザーと共有することも可能です。

Google Apps Script

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

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

Q&A

解決済

2回答

6406閲覧

GASでローカルファイルをGoogleドライブにアップロードしたい

nokatsu

総合スコア0

Google ドライブ

Google ドライブは、Google社が提供するオンラインストレージサービス。オンラインストレージ上に、画像や動画、テキスト、Word/PDFのファイルなどさまざまなファイル保存することができます。また、他のユーザーと共有することも可能です。

Google Apps Script

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

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

0グッド

0クリップ

投稿2021/05/08 01:13

編集2021/05/08 02:21

前提・実現したいこと

htmlで作ったWEBページにアップロードボタンを設置し、そのボタンをクリックしたら各自のPC内にあるローカルファイル(MS Wordなど)を特定のGoogleドライブの特定のフォルダにアップロードする機能を実装したいと思っています。

下記ソースコードのプログラムをGASで作成し、新しくデプロイした後、ウェブアプリケーションとして実行しようとすると、
"uploading..."で止まってしまいます。

function upload_file_gsのデバッグをしてみると、下記のエラーが起きていました。

アップロードする人は複数名いて中にはGoogleアカウントを持っていない人も含まれるため、デプロイの時に

  • 「次のユーザーとして実行:」は「自分」
  • 「このウェブ アプリケーションを実行するために、あなたのアカウント データを使用することを許可します。」

→「アクセスできるユーザー」は「全員」

としています。

発生している問題・エラーメッセージ

TypeError: Cannot read property 'split' of undefined upload_file_gs @ コード.gs:7

該当のソースコード

GAS

1【コード.gs】 2 3function doGet() { 4 return HtmlService.createHtmlOutputFromFile('index'); 5} 6 7var FOLDER_ID = 規定のフォルダID"; 8function upload_file_gs(reader_result, file_name) { 9 var result_split = reader_result.split(','); 10 var content_type = result_split[0].split(';')[0].replace('data:', ''); 11 var row_data = result_split[1]; 12 var data = Utilities.base64Decode(row_data); 13 14 var file = Utilities.newBlob(data, content_type, file_name); 15 var folder = DriveApp.getFolderById(FOLDER_ID); 16 var drive_file = folder.createFile(file); 17 var file_url = drive_file.getUrl(); 18 return file_url; 19} 20 21 22 23【index.html】 24 25<!DOCTYPE html> 26<html> 27<body> 28 <form> 29 <div> 30 <input type="file" id="my_files" multiple> 31 <button id="bt" type="button">Submit</button> 32 </div> 33 </form> 34 <br> 35 <label id="upload_label"></label> 36 <div id="upload_div"></div> 37 38 <script> 39 document.getElementById("bt").addEventListener('click', upload_files); 40 var files_len = 0; 41 var uploaded_len = 0; 42 43 function upload_files() { 44 var files = document.getElementById('my_files').files; 45 files_len = files.length; 46 for (var i = 0; i < files.length; i++) { 47 uploadFile(files[i]); 48 document.getElementById('upload_label').textContent = "uploading..."; 49 } 50 } 51 52 function uploadFile(file) { 53 var reader = new FileReader(); 54 reader.onload = function() { 55 var reader_result = reader.result; 56 var file_name = file.name 57 google.script.run 58 .withSuccessHandler(uploaded) 59 .upload_file_gs(reader_result, file_name); 60 } 61 reader.readAsDataURL(file); 62 } 63 64 function uploaded(file_url) { 65 create_link(file_url); 66 uploaded_len ++; 67 if(uploaded_len == files_len){ 68 document.getElementById('upload_label').textContent = "uploaded"; 69 } 70 } 71 72 function create_link(file_url) { 73 var div = document.getElementById("upload_div"); 74 var br = document.createElement("br"); 75 var link = document.createElement("a"); 76 link.textContent = file_url; 77 link.setAttribute("href", file_url); 78 link.setAttribute("target", "_blank"); 79 div.appendChild(link); 80 div.appendChild(br); 81 } 82 </script> 83</body> 84</html> 85

試したこと

「Chrome V8 ランタイムを有効にする」のチェックボックスを有効化しても、無効化しても結果は同じでした。

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

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

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

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

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

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

guest

回答2

0

調査のためにエラーメッセージがあります。
エラーメッセージが示しているのはreader_resultundefinedだということですよね。
まずはその原因を調べましょう。

投稿2021/05/08 01:19

itagagaki

総合スコア8402

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

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

nokatsu

2021/05/08 02:18

itagagaki様 ありがとうございます。 諸々調べてみた結果、無事に解決しました。
guest

0

自己解決

記述したコードで問題なく動いた。
index.htmlからファイルを渡していなかった事が原因だった。
また、アップロードファイルが0バイトのファイルの場合は、別のエラーが生じていたが、それ以外のファイルであれば無事にアップロード出来ることが分かった。

投稿2021/05/08 02:19

nokatsu

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問