Monday, June 3, 2024
 Popular · Latest · Hot · Upcoming
63
rated 0 times [  64] [ 1]  / answers: 1 / hits: 22944  / 9 Years ago, mon, june 29, 2015, 12:00:00

I'm trying to upload multiple files at once with my app. It recognizes when there are 2 or more files being selected. However, it will only upload the 1st file that is selected to my drive. Also (although quite minor), I was wondering how I can change my textarea font to be Times New Roman to stay consistent with the rest of the font.



Code.gs



function doGet() {
return HtmlService.createHtmlOutputFromFile('form')
.setSandboxMode(HtmlService.SandboxMode.IFRAME);
}

function uploadFiles(form) {

try {
var foldertitle = form.zone + ' | Building: ' + form.building + ' | ' + form.propertyAddress + ' | ' + form.attachType;
var folder, folders = DriveApp.getFolderById(0B7UEz7SKB72HfmNmNnlSM2NDTVVUSlloa1hZeVI0VEJuZUhSTmc4UXYwZjV1eWM5YXJPaGs);
var createfolder = folders.createFolder(foldertitle);
folder = createfolder;
var blob = form.filename;
var file = folder.createFile(blob);
file.setDescription( + form.fileText);

return File(s) uploaded successfully! Here is the link to your file(s): + folder.getUrl();

} catch (error) {
Logger.log('err: ' + error.toString());
return error.toString();
}

}

function uploadArquivoParaDrive(base64Data, nomeArq, idPasta) {
try{
var splitBase = base64Data.split(','),
type = splitBase[0].split(';')[0].replace('data:','');

var byteCharacters = Utilities.base64Decode(splitBase[1]);
var ss = Utilities.newBlob(byteCharacters, type);
ss.setName(nomeArq);

var file = DriveApp.getFolderById(0B7UEz7SKB72HfmNmNnlSM2NDTVVUSlloa1hZeVI0VEJuZUhSTmc4UXYwZjV1eWM5YXJPaGs).createFile(ss);

return file.getName();
}catch(e){
return 'Erro: ' + e.toString();
}
}


form.html



<body>
<div id=formcontainer>

<label for=myForm>Facilities Project Database Attachment Uploader:</label>

<br><br>


<form id=myForm>
<label for=myForm>Project Details:</label>
<div>
<input type=text name=zone placeholder=Zone:>
</div>
<div>
<input type=text name=building placeholder=Building(s):>
</div>
<div>
<input type=text name=propertyAddress placeholder=Property Address:>
</div>
<div>

<label for=fileText>Project Description:</label>

<TEXTAREA name=projectDescription
placeholder=Describe your attachment(s) here:
style =width:400px; height:200px;
></TEXTAREA>


</div>
<br>


<label for=attachType>Choose Attachment Type:</label>
<br>
<select name=attachType>
<option value=Pictures Only>Picture(s)</option>
<option value=Proposals Only>Proposal(s)</option>
<option value=Pictures & Proposals>All</option>
</select>
<br>

<label for=myFile>Upload Attachment(s):</label>
<br>


<input type=file name=filename id=myFile multiple>

<input type=submit value=Submit onclick=iteratorFileUpload()>


</form>
</div>

<div id=output></div>

<script>
function iteratorFileUpload() {
var allFiles = document.getElementById('myFile').files;

if (allFiles.length == 0) {
alert('No file selected!');
} else {

// Send each file one at a time
var i=0;
for (i=0; i < allFiles.total; i+=1) {
console.log('This iteration: ' + i);
sendFileToDrive(allFiles[i]);
};
};
};

function sendFileToDrive(file) {
var reader = new FileReader();
reader.onload = function (e) {
var content = reader.result;
console.log('Sending ' + file.name);

google.script.run
.withSuccessHandler(fileUploaded)
.uploadArquivoParaDrive(content, file.name, currFolder);
}

reader.readAsDataURL(file);
};
</script>

<script src=//ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js></script>

<script>
// Upload de arquivo dentro das pastas Arquivos Auxiliares
function iterarArquivosUpload() {
var arquivos = document.getElementById('inputUpload').files;

if (arquivos.length == 0) {
alert('No file selected!');
} else {
//Show Progress Bar
numUploads.total = arquivos.length;
$('.progressUpload').progressbar({
value : false
});
$('.labelProgressUpload').html('Preparando arquivos para upload');

// Send each file at a time
for (var arqs = 0; arqs < numUploads.total; arqs++) {
console.log(arqs);
enviarArquivoParaDrive(arquivos[arqs]);
}
}
}

function enviarArquivoParaDrive(arquivo) {
var reader = new FileReader();
reader.onload = function (e) {
var content = reader.result;
console.log('Sending ' + arquivo.name);
google.script.run.withSuccessHandler(updateProgressbar).uploadArquivoParaDrive(content, arquivo.name, currFolder);
}
reader.readAsDataURL(arquivo);
}

function updateProgressbar( idUpdate ){
console.log('Received: ' + idUpdate);
numUploads.done++;
var porc = Math.ceil((numUploads.done / numUploads.total)*100);
$('.progressUpload').progressbar({value: porc });
$('.labelProgressUpload').html(numUploads.done +'/'+ numUploads.total);
if( numUploads.done == numUploads.total ){
uploadsFinished();
numUploads.done = 0;
};
}
</script>

<script>
function fileUploaded(status) {
document.getElementById('myForm').style.display = 'none';
document.getElementById('output').innerHTML = status;
}

</script>

<style>
body {
max-width: 400px;
padding: 20px;
margin: auto;
}
input {
display: inline-block;
width: 100%;
padding: 5px 0px 5px 5px;
margin-bottom: 10px;
-webkit-box-sizing: border-box;
‌​ -moz-box-sizing: border-box;
box-sizing: border-box;
}
select {
margin: 5px 0px 15px 0px;
}
input[type=submit] {
width: auto !important;
display: block !important;
}
input[type=file] {
padding: 5px 0px 15px 0px !important;
}
</style>
</body>

More From » html

 Answers
203

I know this question is old, but after finding it and related ones, I was never able to get the multiple file upload working. So after a lot of banging my head against walls, I wanted to post a full example (.html and .gs) in case anyone in the future is looking for one to get started. This is working when I deploy it right now and will hopefully work for other people out there. Note that I just hardcoded the folder in the drive to use in the code.gs file, but that can be easily changed.



form.html:



<body>
<div id=formcontainer>

<label for=myForm>Facilities Project Database Attachment Uploader:</label>

<br><br>


<form id=myForm>
<label for=myForm>Project Details:</label>
<div>
<input type=text name=zone placeholder=Zone:>
</div>
<div>
<input type=text name=building placeholder=Building(s):>
</div>
<div>
<input type=text name=propertyAddress placeholder=Property Address:>
</div>
<div>

<label for=fileText>Project Description:</label>

<TEXTAREA name=projectDescription
placeholder=Describe your attachment(s) here:
style =width:400px; height:200px;
></TEXTAREA>


</div>
<br>


<label for=attachType>Choose Attachment Type:</label>
<br>
<select name=attachType>
<option value=Pictures Only>Picture(s)</option>
<option value=Proposals Only>Proposal(s)</option>
<option value=Pictures & Proposals>All</option>
</select>
<br>

<label for=myFile>Upload Attachment(s):</label>
<br>


<input type=file name=filename id=myFile multiple>

<input type=button value=Submit onclick=iteratorFileUpload()>


</form>
</div>

<div id=output></div>
<div id=progressbar>
<div class=progress-label></div>
</div>

<script src=//ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js></script>
<link rel=stylesheet href=https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css>
<script src=https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js></script>

<script>

var numUploads = {};
numUploads.done = 0;
numUploads.total = 0;

// Upload the files into a folder in drive
// This is set to send them all to one folder (specificed in the .gs file)
function iteratorFileUpload() {
var allFiles = document.getElementById('myFile').files;

if (allFiles.length == 0) {
alert('No file selected!');
} else {
//Show Progress Bar

numUploads.total = allFiles.length;
$('#progressbar').progressbar({
value : false
});//.append(<div class='caption'>37%</div>);
$(.progress-label).html('Preparing files for upload');
// Send each file at a time
for (var i = 0; i < allFiles.length; i++) {
console.log(i);
sendFileToDrive(allFiles[i]);
}
}
}

function sendFileToDrive(file) {
var reader = new FileReader();
reader.onload = function (e) {
var content = reader.result;
console.log('Sending ' + file.name);
var currFolder = 'Something';
google.script.run.withSuccessHandler(updateProgressbar).uploadFileToDrive(content, file.name, currFolder);
}
reader.readAsDataURL(file);
}

function updateProgressbar( idUpdate ){
console.log('Received: ' + idUpdate);
numUploads.done++;
var porc = Math.ceil((numUploads.done / numUploads.total)*100);
$(#progressbar).progressbar({value: porc });
$(.progress-label).text(numUploads.done +'/'+ numUploads.total);
if( numUploads.done == numUploads.total ){
//uploadsFinished();
numUploads.done = 0;
};
}
</script>

<script>
function fileUploaded(status) {
document.getElementById('myForm').style.display = 'none';
document.getElementById('output').innerHTML = status;
}

</script>

<style>
body {
max-width: 400px;
padding: 20px;
margin: auto;
}
input {
display: inline-block;
width: 100%;
padding: 5px 0px 5px 5px;
margin-bottom: 10px;
-webkit-box-sizing: border-box;
‌​ -moz-box-sizing: border-box;
box-sizing: border-box;
}
select {
margin: 5px 0px 15px 0px;
}
input[type=submit] {
width: auto !important;
display: block !important;
}
input[type=file] {
padding: 5px 0px 15px 0px !important;
}
#progressbar{
width: 100%;
text-align: center;
overflow: hidden;
position: relative;
vertical-align: middle;

}
.progress-label {
float: left;
margin-top: 5px;
font-weight: bold;
text-shadow: 1px 1px 0 #fff;
width: 100%;
height: 100%;
position: absolute;
vertical-align: middle;
}
</style>
</body>


code.gs:



function doGet() {
return HtmlService.createHtmlOutputFromFile('form')
.setSandboxMode(HtmlService.SandboxMode.IFRAME);
}

function uploadFileToDrive(base64Data, fileName) {
try{
var splitBase = base64Data.split(','),
type = splitBase[0].split(';')[0].replace('data:','');

var byteCharacters = Utilities.base64Decode(splitBase[1]);
var ss = Utilities.newBlob(byteCharacters, type);
ss.setName(fileName);

var dropbox = Something; // Folder Name
var folder, folders = DriveApp.getFoldersByName(dropbox);

if (folders.hasNext()) {
folder = folders.next();
} else {
folder = DriveApp.createFolder(dropbox);
}
var file = folder.createFile(ss);

return file.getName();
}catch(e){
return 'Error: ' + e.toString();
}
}

[#65992] Saturday, June 27, 2015, 9 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
elainaw

Total Points: 83
Total Questions: 99
Total Answers: 111

Location: South Sudan
Member since Sat, May 27, 2023
1 Year ago
;