Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Create new file in a folder with Apps Script using Google Advanced Drive service

There are four ways to create a new file:

  • DocsList - Shown as DocsList in the Main List. Built in to Apps Script.
  • DriveApp - Shown as Drive in the Main List. Built in to Apps Script.
  • Drive API - Also shown as Drive in the Main List. Must be added to Apps Script.
  • DocumentApp - Shown as Document in the Main List. Built in, but only creates a document file.

They are all called services. Drive API is called an advanced service. So, which one should you use? I don't know, it depends. This question is about the Drive API Advanced Service.

I don't want to use 2 or 3 of the services to get the job done. I'd like to just use one of them. But to decide which one to use, I need to know the capabilities and options of all of them. If the simplest and easiest one to use will do everything I want, then I'll use that.

If I can create a new file with Drive API, but then I need to use the DriveApp service to move the file I created with Drive API, to the folder I want it in, then using Drive API in that particular situation is pointless.

I can create a new file in my Google Drive from a Google Apps Script .gs code, but the file gets written to the main 'My Drive'. I want to write the file directly to a sub-folder. My current code is:

var fileNameSetA = 'someFile.jpg';
var uploadedBlobA = an image uploaded with a file picker;

var fileTestDrive = {
  title: fileNameSetA,
  mimeType: 'image/jpeg'
};

fileTestDrive = Drive.Files.insert(fileTestDrive, uploadedBlobA);

Even though the code works, I have no idea why the syntax is the way it is, and I can't find documentation that tells me why. I can find a list of properties:

The title: and mimeType: are Optional Properties as part of the Request Body. From the example, the Optional Properties are obviously put in a key:value paired object. So, is the syntax:

Drive.Files.insert(optional properties, content);

There are also Required query parameters of:

uploadType --> media, multipart, resumable

But I don't see any required uploadType parameter designated anywhere in the example code. So, I don't understand Google's documentation.

Google Documentation Insert

Is it possible to write directly to a specific drive with Google Advanced Drive service in a Apps Script .gs code file? How do I do it?

like image 244
Alan Wells Avatar asked Jun 15 '14 00:06

Alan Wells


People also ask

How do I create a Google Drive folder in Google Drive API?

To create a folder, use the files. create method with the application/vnd. google-apps. folder MIME type and a title.


1 Answers

The easiest way to create a new file is to use DriveApp which comes with pure Google Apps Script:

var dir = DriveApp.getFolderById("{dir_id}");
var file = dir.createFile(name, content);

If you do not know exact directory's id you can get the folder by its name:

var dir = DriveApp.getFoldersByName(name).next();

The next() is there because getFoldersByName() returns collection of all directories whose names match given value.

Also check DriveApp docs: https://developers.google.com/apps-script/reference/drive/drive-app

like image 63
Lucas Wa Avatar answered Sep 20 '22 22:09

Lucas Wa