我已经编写了以下Google Apps脚本,该脚本记录文件名并为这些文件生成直接下载链接。到目前为止,它的工作完美无缺。
-code> function SearchFiles(){var searchFor ='title containsLetter'; var names = []; var fileIds = []; var files = DriveApp.searchFiles(searchFor); while(files.hasNext()){var file = files.next(); var fileId = file.getId(); //获得文件fileIds.push(fileId)的FileId; var name = file.getName(); names.push(名称); } for(var i = 0; i< names.length; i ++){Logger.log(names [i]); Logger.log(drive.google/uc?export=download&id=+ fileIds [i]);日志是这样的: $ / $> $ / $> $ / $> b $ b [16-02-04 16:29:27:794 IST]写给SRL的实验室信 [16-02-04 16 :29:27:795 IST] drive.google/uc?export=download& ID = 1wTDiv7jensErQl2CODxkTb-tYAvv3vDYPGDECEPrXm [16-02-04 16:29:27:796 IST] Letters_Nirvedanandaji_I.docx [16-02-04 16:29:27:797 IST] https://开头drive.google/uc?export=download&id=0B_NmiOlCM-VTa3VrNjF0NE9iNWRQODNOME90VGF3WUV2OW5现在,问题是:
解决方案首先,您需要在脚本文件中使用 doGet()函数,该函数通常位于: 代码 函数doGet(){ var template = HtmlService.createTemplateFromFile('Index'); //在IFRAME沙箱模式下构建并返回HTML。 b .setSandboxMode(HtmlService.SandboxMode.IFRAME); }; 函数SearchFiles(inputValueFromUser){ Logger.log('inputValueFromUser:'+ inputValueFromUser); if(inputValueFromUser ===){return'No Search String';}; // inputValueFromUser =; // inputValueFromUser = inputValueFromUser!==?inputValueFromUser:Jan8Test; var searchFor ='title contains''+ inputValueFromUser +'''; Logger.log('searchFor:'+ searchFor); var file, fileId,名称, downloadURL =, arryOfUrls = []; var files = DriveApp.searchFiles(searchFor); Logger.log('files:'+ files); Logger.log(files.hasNext()); while(files.hasNext()){ file = files.next(); fileId = file.getId(); //获取文件的FileId name = file.getName(); Logger.log(drive.google/uc?export=download&id=+ fileId); downloadURL =drive.google/uc?export=download&id=+ fileId; arryOfUrls.push(downloadURL); }; Logger.log('arryOfUrls:'+ arryOfUrls); return arryOfUrls; //。toString(); //发送下载地址数组返回客户端JavaScript };
然后您需要主要的HTML表单,通常名为:
索引 <!DOCTYPE html> < html> < body> < h1> 此页面的标题< / h1> < h2 id =主标题>在线实验室报告< / h2> < div class =block result-displayid =results> 输入您的Lab_ID:< input id =idFileNametype =textplaceholder =输入文件名称> < div class =hiddenid =error-message> < / div> < / div> < div id ='idMyMessage'> < / div> < button onmouseup =getTheData()>获取下载链接< / button> <! - 使用模板化HTML打印scriptlet导入JavaScript。 - > <?!= HtmlService.createHtmlOutputFromFile('JS_MainPageCode')。getContent(); ?> < / body> < / html>JS_MainPageCode:
<脚本> 函数updateDisplay(arrayOfUrls){ console.log('arrayOfUrls:'+ arrayOfUrls); if(arrayOfUrls ==='No Search String'){return;}; var headingText =显示arrayOfUrls for+ arrayOfUrls +folder:; document.getElementById('main-heading')。textContent = headingText; var dataLngth = arrayOfUrls.length; console.log('dataLngth:'+ dataLngth); for(var i = 0; i< dataLngth; i ++){ var name = arrayOfUrls [i]; document.getElementById('results')。insertAdjacentHTML('beforeend','< div> + name +'< / div>'); window.getTheData = function(){ var userInput = document.getElementById(idFileName).value; console.log('userInput:'+ userInput); document.getElementById('results')innerHTML =; //在出现错误消息时重置为空白 if(userInput ==='') { document.getElementById('results')。insertAdjacentHTML('beforeend','< div> +'请输入文件名'+'< / div>'); return; }; google.script.run .withSuccessHandler(updateDisplay) .SearchFiles(userInput); }; < / script>如果您想在单独的文件中使用CSS样式,请使用< style>< / style> >在上面的例子中,索引文件是HTML模板,用线:?!
< = HtmlService.createHtmlOutputFromFile(样式表')的getContent(); ?> <?!= HtmlService.createHtmlOutputFromFile('JS_MainPageCode')。getContent(); ?>
I have written the following Google Apps script, which logs the file names and generates direct download links for the files. So far it is working perfectly.
function SearchFiles() { var searchFor ='title contains "Letter"'; var names =[]; var fileIds=[]; var files = DriveApp.searchFiles(searchFor); while (files.hasNext()) { var file = files.next(); var fileId = file.getId();// To get FileId of the file fileIds.push(fileId); var name = file.getName(); names.push(name); } for (var i=0;i<names.length;i++){ Logger.log(names[i]); Logger.log("drive.google/uc?export=download&id=" + fileIds[i]); } }
The Log is like this:
[16-02-04 16:29:27:794 IST] Letter to SRL for Laboratory [16-02-04 16:29:27:795 IST] drive.google/uc?export=download& id=1wTDiv7jensErQl2CODxkTb-tYAvv3vDYPGDECEPrXm [16-02-04 16:29:27:796 IST] Letters_Nirvedanandaji_I.docx [16-02-04 16:29:27:797 IST] drive.google/uc?export=download&id=0B_NmiOlCM-VTa3VrNjF0NE9iNWRQODNOME90VGF3WUV2OW5Now the questions are:
解决方案
First you need a doGet() function in a script file, which usually goes in:
Code function doGet() { var template = HtmlService.createTemplateFromFile('Index'); // Build and return HTML in IFRAME sandbox mode. return template.evaluate() .setTitle('RKMS Kankhal Lab Portal') .setSandboxMode(HtmlService.SandboxMode.IFRAME); }; function SearchFiles(inputValueFromUser) { Logger.log('inputValueFromUser: ' + inputValueFromUser); if (inputValueFromUser==="") {return 'No Search String';}; //inputValueFromUser = ""; //inputValueFromUser = inputValueFromUser !== ""?inputValueFromUser:"Jan8Test"; var searchFor ='title contains "' + inputValueFromUser + '"'; Logger.log('searchFor: ' + searchFor); var file, fileId, name, downloadURL = "", arryOfUrls = []; var files = DriveApp.searchFiles(searchFor); Logger.log('files: ' + files); Logger.log(files.hasNext()); while (files.hasNext()) { file = files.next(); fileId = file.getId();// To get FileId of the file name = file.getName(); Logger.log("drive.google/uc?export=download&id=" + fileId); downloadURL = "drive.google/uc?export=download&id=" + fileId; arryOfUrls.push(downloadURL); }; Logger.log('arryOfUrls: ' + arryOfUrls); return arryOfUrls;//.toString(); //Send array of download urls back to client side JavaScript };Then you need the main HTML form, often named:
Index <!DOCTYPE html> <html> <body> <h1> The Title of The Page Here </h1> <h2 id="main-heading">Online Lab reports</h2> <div class="block result-display" id="results"> Enter your Lab_ID: <input id="idFileName" type="text" placeholder="Enter the file name"> <div class="hidden" id="error-message"> </div> </div> <div id='idMyMessage'> </div> <button onmouseup="getTheData()">Get Download Link</button> <!-- Use a templated HTML printing scriptlet to import JavaScript. --> <?!= HtmlService.createHtmlOutputFromFile('JS_MainPageCode').getContent(); ?> </body> </html>JS_MainPageCode:
<script> function updateDisplay(arrayOfUrls) { console.log('arrayOfUrls: ' + arrayOfUrls); if (arrayOfUrls === 'No Search String') {return;}; var headingText = "Displaying arrayOfUrls for " + arrayOfUrls + " folder:"; document.getElementById('main-heading').textContent = headingText; var dataLngth = arrayOfUrls.length; console.log('dataLngth: ' + dataLngth); for (var i = 0; i < dataLngth; i++) { var name = arrayOfUrls[i]; document.getElementById('results').insertAdjacentHTML('beforeend', '<div>' + name + '</div>'); } } window.getTheData = function() { var userInput = document.getElementById("idFileName").value; console.log('userInput: ' + userInput); document.getElementById('results')innerHTML = "";//Reset to blank in case there was an error message if (userInput === '') { document.getElementById('results').insertAdjacentHTML('beforeend', '<div>' + 'Please Enter a File Name' + '</div>'); return; }; google.script.run .withSuccessHandler(updateDisplay) .SearchFiles(userInput); }; </script>If you want to have CSS styling in a separate file, then create an HTML file with <style></style> tags, and then use templated HTML to include the seperate file into the Index file.
In the example above, the Index file is templated HTML, with lines:
<?!= HtmlService.createHtmlOutputFromFile('Stylesheet').getContent(); ?> <?!= HtmlService.createHtmlOutputFromFile('JS_MainPageCode').getContent(); ?>
更多推荐
Google脚本,用用户输入下载文件
发布评论