Переход к вложенным папкам в диске с помощью скрипта приложения Google

#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 ?