this continuation how use advanced drive service upload files.
my webapp consists of upload form data files, stored on google drive. (full code in snippet below.) i'm having problem following line of code:
var file = drive.files.insert(resource, mediadata); // create file using drive api try { //get root folder , pull existing folders, plus setup variables pulled form var dropbox = form.country; var timestamp = new date(); //set file name differently weekly member report (do not want overright based on name keep each extract add timestamp name) if (form.reporttype == "member weekly"){ var filename = form.reporttype + timestamp + ".xls"; } else { var filename = form.reporttype+".xls"; } var rootfolder = driveapp.getfolderbyid("0byvtwn42hsoxfnvosjb2nwprynriq2vwudzeendnowwwm1fozk1evnjou3bxqxhwu0pdse0"); //note root folder live uploads folder in flatworld app folder structure var folder, folders = rootfolder.getfoldersbyname(dropbox); //check if folder exists , if not create if (folders.hasnext()) { folder = folders.next(); } else { folder = rootfolder.createfolder(dropbox); } var folderurl = folder.geturl(); // retain url of folder final end message user //check if file exists , delete if var file, files = folder.getfilesbyname(filename); while( files.hasnext()){ file = files.next(); file.settrashed(true); } //new code stackover flow: //upload file , set various properties var mediadata = form.myfile; var resource = { title: filename, mimetype: 'application/vnd.ms-excel', description: "uploaded via bni upload form " + form.myname + " on: " + timestamp }; var file = drive.files.insert(resource, mediadata); // create file using drive api var fileid = file.id; var driveappfile = driveapp.getfilebyid(fileid); // retrieve file in driveapp scope. var fileurl = driveappfile.geturl(); //retain url of file final end message user driveapp.removefile(driveappfile); // remove new file users root drive folder.addfile(driveappfile); // puts file in selected folder //end of new code stackover flow //success message displayed user return "thanks! file uploaded to: <br><br><b>folder location:</b> " + folderurl + "<br>" + "<b>file:</b> " + fileurl + ". <br><br>for queries please email user@example.com copying urls displayed here in email. can close browser window or use link below upload file.<br><br>"; } catch (error) { //catch error return user , email error details its throwing error message "empty response" on line of code above when try , upload large file (15mb) have suggestions. inside files insert limit of 5120gb , code works fine on smaller files.
i've tried add in loop in function try upload couple of times, still throwing same error sadly:
//setup function return null if file not uploaded correctly function createdrivefile(resource_f, mediadata_f){ try{ var file = drive.files.insert(resource_f, mediadata_f); // create file using drive api return file; } catch (e) {return null;} } //try upload , loop if null var maxtries = 3; var tries = 0; { tries = tries + 1; if (tries > 0) { var file = createdrivefile(resource, mediadata); logger.log("i'm trying upload, try number: " + tries); } } while ((file == null) && (tries < maxtries)); if (file == null) { var file = drive.files.insert(resource, mediadata); // try 1 laste time create file using drive api - outside loop function if error thrown script stops } the error seems occur on larger file, if reduce size of same file solves error need adjust upload process account larger file. there google apps script equivalent of making api upload request resumable?
your file size determinant factor here. referencing documentation suggests simple upload method used here 5mb only.
https://developers.google.com/drive/web/manage-uploads
your comments seem confirm happening you.
as hinted, use resumable upload method. use uploadtype: resumable parameter flag – api docs on insert method describes how.
Comments
Post a Comment