Manejo de múltiples archivos desde un elemento de entrada en una matriz con Google Apps Script

Tengo un formulario que permite seleccionar un elemento de una lista desplegable y cargar un archivo. El nombre y la ID del elemento se guardan en un documento de hoja de cálculo. Funciona con un archivo … pero quiero subir varios archivos. ¿Podrías ayudarme a arreglar el guión?

La parte HTML se ve así

Bildauswahl

Mi script, que no funciona, es el siguiente:

 var dropBoxId = "XYZ"; var logSheetId = "ABC"; function doGet(e) { return HtmlService.createHtmlOutputFromFile('InputForm.html'); } function uploadFiles(formObject) { try { // Create a file in Drive from the one provided in the form var folder = DriveApp.getFolderById(dropBoxId); var input = document.getElementById('myFiles'); for (i = 0; i<input.files.length; i++) { var blob = input.files[i]; var file = folder.createFile(blob); var ss = SpreadsheetApp.openById(logSheetId); var sheet = ss.getSheets()[0]; sheet.appendRow([file.getName(), file.getUrl(), formObject.myName]); } // Return the new file Drive URL so it can be put in the web app output return file.getUrl(); } catch (error) { return error.toString(); } } 

Gracias.

A partir de ahora tienes que usar un trabajo para trabajar con múltiples archivos. El atributo múltiple solo funciona en modo IFRAME, pero las entradas de archivo están rotas en el modo IFRAME.

Para ver esta solución, eche un vistazo a la presentación de errores para este problema: https://code.google.com/p/google-apps-script-issues/issues/detail?id=4610

También en su código tiene alguna mezcla de código del lado del servidor y del lado del cliente que no funcionará:

 var folder = DriveApp.getFolderById(dropBoxId); //server side var input = document.getElementById('myFiles'); //client side 

Tendrá que hacer su procesamiento de archivos múltiples en el lado del cliente

Encontré una buena solución para cargar archivos múltiples. Las limitaciones de los archivos deben ser inferiores a 10 MB.

CODE.GS

 function doGet() { return HtmlService.createHtmlOutputFromFile('index').setSandboxMode(HtmlService.SandboxMode.IFRAME); } function saveFile(data,name,folderId) { var contentType = data.substring(5,data.indexOf(';')); var file = Utilities.newBlob(Utilities.base64Decode(data.substr(data.indexOf('base64,')+7)), contentType, name); DriveApp.getFolderById(folderId).createFile(file); } 

index.html