UpLOAD Any File To Google Drive with AI2

Now updated with Juan's latest version of the extension, in order to handle file locations with Android >= 10. The blocks required some changes in order to test for the Android version, and set the blocks accordingly. Also included another test for the db file extension. No change required to the google apps script web app. Read all the content below the blocks to get an understanding of how it all works! (now updated with api value instead of platform version). For Android >= 10 you will find the aia project takes you to the Application Specific Directory which normally will not have any files in it and is the only place the file picker takes you! To help with this I have added a small routine to copy the ai2logo file in assets to the ASD or root folder.

Example AIA project with FilePicker for all Android Versions

(Tested Android 7, 10, 11)

BLOCKS (All versions Android <>10)


With many thanks to Juan Antonio, who developed THIS extension, we are now able to upload any file (as far as I have tested)

to Google Drive from within AI2, using base64 encoding and a simple google web app.

I have prepared a simple example to demonstrate how this is done, and can be used as a base to replace the HOWTOs I have done

for uploading files and OCR for images and PDFs using Google Drive and Docs.

I recommend you keep original upload file sizes below 5mb

Tested on the following file types so far: 3gp,csv,gif,htm,html,jpeg,jpg,mp3,mp4,pdf,png,svg,txt,wav,webm,zip (see UPDATE2 below regarding aia & aix files)

The workflow:

  1. Get the file and its path and filename from either assets or the virtual sdcard

  2. Get the mimetype of the file using blocks from the extension

  3. Convert the file to a base64 encoded string

  4. Send these three things: filename, mimetype and encoded string to the web app

  5. The web app decodes the encoded string, and saves the file with the supplied filename, and with the correct mimetype to your folder specified in the web app

  6. The web app then returns a “success” message, if successful.


function doPost(e) {

var data = Utilities.base64Decode(e.parameters.data);

var blob = Utilities.newBlob(data, e.parameters.mimetype, e.parameters.filename);

DriveApp.getFolderById('<YOUR FOLDER ID HERE>').createFile(blob);

return ContentService.createTextOutput("Your File Successfully Uploaded");


If you want the file ID of the uploaded file returned to the app, then use this script instead: (you will need to amend the workings of the Web1.GotText blocks accordingly)

function doPost(e) {

var data = Utilities.base64Decode(e.parameters.data);

var blob = Utilities.newBlob(data, e.parameters.mimetype, e.parameters.filename);

var fileID = DriveApp.getFolderById('<YOUR FOLDER ID HERE>').createFile(blob).getId();

return ContentService.createTextOutput(fileID);


Remember to publish and create a new version each time you change something in the script. The script should run as the owner of the google account, and be accessible to “anyone,even anonymous”

Get the URL to the web app script when you publish, to use in your blocks


Remember to replace the correct URL for the web app script to the variable at the top of the blocks

AIA – SimpleExample_UploadAnyFileToGD


Many thanks again to Juan, none of this would be possible without your fine efforts 🙂


On request from another user on the forum, I developed a further demo that provides a file picker (targeting the sdcard). This required Taifun's File Extension, so credits to Taifun for this. The demo will return a set of directories under /storage/emulated/0 and then after selection of a directory, return all the files in that directory for selection. The file path is then setup for use with the base64 extension. Tested in companion for Android 9 and 10



With that to user SG_Production on the AI2 forum, it has become apparent that files with the extension aia or aix do not provide a valid mimetype in the app, causing the demo app to error. To overcome this an additional check is required when setting the mimetype if uploading these files. There may also be other files types where the default finding of mimetype does not work.