├── README.md ├── code.gs └── form.html /README.md: -------------------------------------------------------------------------------- 1 | # apps-script-multi-file-upload 2 | Apps Script that will enable anonymous users to upload multiple files to Google Drive. 3 | -------------------------------------------------------------------------------- /code.gs: -------------------------------------------------------------------------------- 1 | function doGet() { 2 | return HtmlService.createHtmlOutputFromFile('form').setSandboxMode( 3 | HtmlService.SandboxMode.IFRAME); 4 | } 5 | 6 | function createFolder(parentFolderId, folderName) { 7 | try { 8 | var parentFolder = DriveApp.getFolderById(parentFolderId); 9 | var folders = parentFolder.getFoldersByName(folderName); 10 | var folder; 11 | if (folders.hasNext()) { 12 | folder = folders.next(); 13 | } else { 14 | folder = parentFolder.createFolder(folderName); 15 | } 16 | return { 17 | 'folderId' : folder.getId() 18 | } 19 | } catch (e) { 20 | return { 21 | 'error' : e.toString() 22 | } 23 | } 24 | } 25 | 26 | function uploadFile(base64Data, fileName, folderId) { 27 | try { 28 | var splitBase = base64Data.split(','), type = splitBase[0].split(';')[0] 29 | .replace('data:', ''); 30 | var byteCharacters = Utilities.base64Decode(splitBase[1]); 31 | var ss = Utilities.newBlob(byteCharacters, type); 32 | ss.setName(fileName); 33 | 34 | var folder = DriveApp.getFolderById(folderId); 35 | var files = folder.getFilesByName(fileName); 36 | var file; 37 | while (files.hasNext()) { 38 | // delete existing files with the same name. 39 | file = files.next(); 40 | folder.removeFile(file); 41 | } 42 | file = folder.createFile(ss); 43 | return { 44 | 'folderId' : folderId, 45 | 'fileName' : file.getName() 46 | }; 47 | } catch (e) { 48 | return { 49 | 'error' : e.toString() 50 | }; 51 | } 52 | } -------------------------------------------------------------------------------- /form.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 |