WallyG
WallyG

Reputation: 197

Google Script - Multi File Upload - How to Upload Files to New Sub-folder

I am trying to modify the below to code so the all files in the var fileBlob = e.parameter['file'+i]; are uploaded into the new sub-folder that is created.

After submitting the upload, a new folder is created for each file uploaded and each file is uploaded to each folder.

How can I get the doPost to submit the upload files to the new sub-folder only. So if I upload 20 files, 20 files are added/uploaded to the one sub-folder only.

Multi File Upload Ui Form

Upload UI

Google Drive Results

G-Drive Folders Created

Code

function doPost(e) {
  var foldername = e.parameter.folderName;
  Logger.log('foldername = '+foldername);
  var numFiles = Number(e.parameter.hidden);
  Logger.log('numFiles = '+numFiles);
  for (var i = 1; i<=numFiles; i++){
    Logger.log(i);
    var fileBlob = e.parameter['file'+i];
    Logger.log(fileBlob);
    var newFolder = DocsList.getFolderById("0Bw8NytPhOo00b0xIVm41LWlZRlk").createFolder(foldername);
    newFolder.getUrl();
    Logger.log(newFolder.getUrl());
    var newFile = DocsList.createFile(fileBlob);
    newFile.addToFolder(newFolder);

  }

Full Code here (Created by Serge insas)

Upvotes: 0

Views: 3153

Answers (2)

Serge insas
Serge insas

Reputation: 46802

As mentioned in the other answer, the folder creation should happen just once before the loop but instead of adding the new file to the folder (and keeping it in the root folder as well unless you remove it) I would suggest to use the createFile method from the folder class instead.

The code becomes simpler :

function doPost(e) {
  var foldername = e.parameter.folderName;
  Logger.log('foldername = '+foldername);
  var numFiles = Number(e.parameter.hidden);
  Logger.log('numFiles = '+numFiles);
  var newFolder = DocsList.getFolderById("0Bw8NytPhOo00b0xIVm41LWlZRlk").createFolder(foldername);
  for (var i = 1; i<=numFiles; i++){
    Logger.log(i);
    var fileBlob = e.parameter['file'+i];
    var newFile = newFolder.createFile(fileBlob);// create the file directly in the new folder
  }
}

Upvotes: 3

Peter Maidens
Peter Maidens

Reputation: 503

I think your problem here is that you call .createFolder for each file. Try putting

var newFolder = DocsList.getFolderById("0Bw8NytPhOo00b0xIVm41LWlZRlk").createFolder(foldername);

outside of the for loop.

Upvotes: 1

Related Questions