前提・実現したいこと
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/ツールのバージョンなど)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/08 02:18