Multiple File Upload Google Apps Script -
put script upload file google drive. need able handle either big .zip file, or multiple image files. times out if upload big .zip file (around 7mb)
i prefer have upload multiple files.
apps script:
function doget(e) { return htmlservice.createhtmloutputfromfile('form.html'); } function uploadfiles(form) { try { var unitnumber = form.unitnumber; if (unitnumber == "") { unitnumber = ""; } else { unitnumber = " #" + unitnumber; } var foldertitle = form.streetaddress + unitnumber + ' ' + form.cityname + ' ' + form.statename + ' - ' + form.businessname + ' ' + form.managername + ' - ' + form.propertytype; var folder, folders = driveapp.getfolderbyid("0b0v8-0eo7tx8mtqzcgfwdxf6sfu"); var createfolder = folders.createfolder(foldertitle); folder = createfolder; var blob = form.filename; var file = folder.createfile(blob); return "file uploaded "; } catch (error) { logger.log('err: ' + error.tostring()); return error.tostring(); } } form code
<body> <div id="formcontainer"> <form id="myform"> <div> <input type="text" name="businessname" placeholder="business name"> </div> <div> <input type="text" name="managername" placeholder="manager name"> </div> <div> <input type="text" name="streetaddress" placeholder="street address"> </div> <div> <input type="text" name="unitnumber" placeholder="unit number"> </div> <div> <input type="text" name="cityname" placeholder="city"> </div> <div> <input type="text" name="statename" placeholder="state"> </div> <br> <label for="propertytype">choose type</label> <br> <select name="propertytype"> <option value="interactive floor plan">ifp</option> <option value="pictures only">pictures</option> <option value="video only">video</option> <option value="complete property">all</option> </select> <br> <label for="myfile">compress files .zip file</label> <br> <input type="file" name="filename" id="myfile" multiple> <input type="submit" value="upload file" onclick="this.value='uploading..'; google.script.run.withsuccesshandler(fileuploaded) .uploadfiles(this.parentnode); return false;"> </form> </div> <div id="output"></div> <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>
i don't see other way make gas work multiple files if not multiple files inputs. can add dinamically input jquery (or plain javascript), , test in server side check how many input files got carried over.
like so: in html:
<input type="file" name="filename0" id="myfile"><div id="moreinputs"></div> <button onclick="morefieds()">add more fieds</button> <script> var numinputs = 1; function morefieds(){ $('#moreinputs').append($('<input type="file" name="filename'+numinputs+'" id="myfile">')); numinputs++; } </script> in code.gs:
var numforms = 0; while( form[ (filename + numforms) ] ){ var blob = form[ (filename + numforms) ]; var file = folder.createfile(blob); numforms++; } or more, send files inputs 1 one in script, giving each input it's own form, way can know when each file has done loading successhandler.
Comments
Post a Comment