#javascript #google-apps-script #google-drive-api
Вопрос:
Я пытаюсь создать простую базу данных, которая собирает предыдущие экзамены и другие документы.
Вот HTML — код
lt;!DOCTYPE htmlgt; lt;html lang="en"gt; lt;headgt; lt;meta charset="UTF-8"gt; lt;meta http-equiv="X-UA-Compatible" content="IE=edge"gt; lt;meta name="viewport" content="width=device-width, initial-scale=1.0"gt; lt;titlegt;Documentlt;/titlegt; lt;scriptgt; function UploadFile() { var reader = new FileReader(); var file = document.getElementById('attach').files[0]; reader.onload = function(){ document.getElementById('fileContent').value=reader.result; document.getElementById('filename').value=file.name; document.getElementById('uploadForm').submit(); } reader.readAsDataURL(file); } var majorObject = { "EE": ["EE251/250", "EE23131"], //add other majors and course like "major": ["course1", "course2"], "IE": ["IE321", "IE332"] } window.onload = function() { var majorSel = document.getElementById("major"); var courseSel = document.getElementById("course"); var chapterSel = document.getElementById("chapter"); for (var x in majorObject) { majorSel.options[majorSel.options.length] = new Option(x, x); } majorSel.onchange = function() { //empty Chapters- and courses- dropdowns courseSel.length = 1; var z = majorObject[majorSel.value]; console.log(z); for (var i = 0; i lt; z.length; i ) { courseSel.options[courseSel.options.length] = new Option(z[i], z[i]); } } } lt;/scriptgt; lt;/headgt; lt;bodygt; lt;form id="uploadForm" action="https://script.google.com/macros/s/AKfycbwKNrxPq3UvrI9KO1AFz4YcZBrIydjn5MC6pZS59Z7y-_5zuSe_Z1Z0Jz6gaV_XnvoZ/exec" method="POST"gt; lt;input type="hidden" value="" name="fileContent" id="fileContent"gt; lt;input type="hidden" value="" name="filename" id="filename"gt; lt;labelgt; MAjor : lt;/labelgt;lt;select name="major" id="major"gt; lt;option value="" selected="selected"gt;Select majorlt;/optiongt; lt;/selectgt; lt;labelgt; Course :lt;/labelgt; lt;select name="course" id="course"gt; lt;option value="" selected="selected"gt;Please select major firstlt;/optiongt; lt;/selectgt; lt;labelgt; Contact : lt;/labelgt;lt;input required type="text" value="" name="contact" id="contact"gt; lt;labelgt; FileType :lt;/labelgt; lt;select name="type" id="type"gt; lt;option value="" selected="selected"gt;Select Typelt;/optiongt; lt;option value="TestBank"gt;TestBanklt;/optiongt; lt;option value="Quiz"gt;Quizlt;/optiongt; lt;option value="Slide"gt;Slidelt;/optiongt; lt;/selectgt; lt;labelgt; LinkedIn Account:lt;/labelgt;lt;input type="text" value="" name="linkedinUrl" id="linkedinUrl"gt; lt;/formgt; lt;input required id="attach" name="attach" type="file"/gt; lt;input value="Submit" type="button" onclick="UploadFile();" /gt; lt;/bodygt; lt;/htmlgt;
Клиент должен выбрать специальность, курс и тип документа (викторина, книга и т.д.). Затем программа должна собрать данные и доставить их в нужную папку на диске в соответствии с выбором клиента Например, если клиент ввел IE, IE321, тест. На Gdrive программа должна ввести папку IE, папку IE321, папку викторины, затем она удаляет загруженные клиентом файлы.
Моя проблема в том, что каждый раз, когда кто-то отправляет форму, программа просто создает папку в папке на главном диске. Кроме того, он не накапливает данные.
Вот код сценария приложения:
function doPost(e) { try { var data = e.parameter.fileContent; var filename = e.parameter.filename; var course = e.parameter.course; var major = e.parameter.major; var types = e.parameter.type; var result=uploadFileToGoogleDrive(data,filename,major,course,e,types); return ContentService // return json success results .createTextOutput( JSON.stringify({"result":"success", "data": JSON.stringify(result) })) .setMimeType(ContentService.MimeType.JSON); } catch(error) { // if error return this Logger.log(error); return ContentService .createTextOutput(JSON.stringify({"result":"error", "error": error})) .setMimeType(ContentService.MimeType.JSON); } } function uploadFileToGoogleDrive(data, file, major, course,e,types) { try { var dropbox = "Demo"; var folder, folders = DriveApp.getFoldersByName(dropbox); if (folders.hasNext()) { folder = folders.next(); } else { var selectedmajor = folder[0].getFoldersByName(major); var selectedcourse = selectedmajor[0].getFoldersByName(course); var selectedtype = selectedcourse[0].getFoldersByName(types); folder = DriveApp.createFolder(selectedtype); } var contentType = data.substring(5,data.indexOf(';')), bytes = Utilities.base64Decode(data.substr(data.indexOf('base64,') 7)), blob = Utilities.newBlob(bytes, contentType, file); var file = folder.createFolder([major, course].join("-")).createFile(blob); var fileUrl=file.getUrl(); //Generating Email Body var html = 'lt;bodygt;' 'lt;h2gt; New Job Application lt;/h2gt;' 'lt;pgt;Name : ' e.parameters.name 'lt;/pgt;' 'lt;pgt;Email : ' e.parameters.email 'lt;/pgt;' 'lt;pgt;Contact : ' e.parameters.contact 'lt;/pgt;' 'lt;pgt;Skill Sets : ' e.parameters.skillsets 'lt;/pgt;' 'lt;pgt;LinkedIn Url : ' e.parameters.linkedinUrl 'lt;/pgt;' 'lt;pgt;File Name : ' e.parameters.filename 'lt;/pgt;' 'lt;pgt;lt;a href=' file.getUrl() 'gt;Resume Linklt;/agt;lt;/pgt;lt;br /gt;' 'lt;/bodygt;'; record_data(e,fileUrl); MailApp.sendEmail(emailTo, "New Job Application Recieved","New Job Application Request Recieved",{htmlBody:html}); return file.getUrl(); } catch (f) { return ContentService // return json success results .createTextOutput( JSON.stringify({"result":"file upload failed", "data": JSON.stringify(f) })) .setMimeType(ContentService.MimeType.JSON); } }
Комментарии:
1. Что вы сделали, чтобы отладить его? У вас есть все данные, поэтому вы должны быть тем, кто их отладит.
2. Вы уверены, что приложение выполняется от имени пользователя, имеющего доступ к папке
Demo
?