知恵袋への回答は質問に直接答えたが、画面ロード時に時間がかかりそうなので処理を全体的に変えてみた。
function doGet(e) { return HtmlService.createTemplateFromFile("index.html").evaluate().setTitle("タイトル"); } function GetBase64Image(fileId,param) { var file = DriveApp.getFileById(fileId); var blob = file.getBlob(); var contentType = blob.getContentType(); var base64 = Utilities.base64Encode(blob.getBytes()); var imageSrc = "data:" + contentType + ";base64, " + base64; return {"name":file.getName(),"id":fileId,"base64":imageSrc,"param":param}; }index.html
<html> <head> <script> <? var folder = DriveApp.getFolderById("1MdeTdaYDv9BK9QTaZes5_bTDRpKiLRnA"); var files = folder.getFiles(); var list = []; while (files.hasNext()) { var file = files.next(); list.push({"id":file.getId(),"name":file.getName(),"url":file.getUrl()}); } ?> var list = <?!= JSON.stringify(list) ?>; function onSelected(event) { var img = document.getElementById("image") img.alt = "Loading...."; img.src = null; var fileId = event.currentTarget.value; google.script.run .withSuccessHandler( SuccessGetBase64Image ) .withFailureHandler( Failure ) .GetBase64Image( fileId, img.id ); } function Failure(){ alert("失敗"); } function SuccessGetBase64Image(entry) { document.getElementById(entry.param).alt = entry.name; document.getElementById(entry.param).src = entry.base64; } function onLoad() { var select = document.getElementById("select"); select.addEventListener('change', onSelected); list.forEach( file => { var option = document.createElement("option"); option.value = file.id; option.innerText = file.name; select.appendChild(option); }); } </script> </head> <body onload="onLoad();"> <label for="select">Choose a menu:</label> <select name="select" id="select"> <option value="">--Please choose an option--</option> </select> <p><img src="" height="562" width="750" alt="選択されてません" align="top" id="image">ここに画像表示</p> </script> </body> </html>
0 件のコメント:
コメントを投稿
質問、要望、指摘など書いていただいてもよいですが、対応できるとは限りませんのでご了承ください。私に対するものも含め他の人を嫌な気分になるようなコメントは避けてください。