0

I'd like to give the user the option to upload a file, but it's not strictly necessary. This script seems to glitch if there is no file specified. How can I fix that? It seems like the line it really doesn't like is: var file1 = folder.createFile(blob1);

function doGet(e) {
  return HtmlService.createHtmlOutputFromFile('form.html');
}

function uploadFiles(form) {

  try {

    var dropbox = "Student Files";
    var folder, folders = DriveApp.getFoldersByName(dropbox);

    if (folders.hasNext()) {
      folder = folders.next();
    } else {
      folder = DriveApp.createFolder(dropbox);
    }


    var id = "1L2syfAOm6MiYPtWuWwFZFK_ZtLpLOjNx9EpjHh2IKUY";            
    var ss = SpreadsheetApp.openById(id);


    var blob1 = form.myFile1;
    var file1 = folder.createFile(blob1);
    file1.setDescription("Uploaded by " + form.myName);
    var f1 = '=HYPERLINK("' + file1.getUrl() + '", "File 1")';


    Logger.log("test");

    var sheet = ss.getSheetByName('Sheet1');
    sheet.appendRow([form.myName, form.addy, form.twitter, form.status, form.what, form.projTitle, 
                     form.brief, form.full, form.role, form.date, form.website, f1]);


    return "Your entry was successfully uploaded!";



  } catch (error) {

    return error.toString();
  }

}

EDIT: Thanks to suggestion, here is what I ended up with (allows for three optional files)

function doGet(e) {
  return HtmlService.createHtmlOutputFromFile('form.html');
}

function uploadFiles(form) {

  try {

    var dropbox = "Student Files";
    var folder, folders = DriveApp.getFoldersByName(dropbox);

    if (folders.hasNext()) {
      folder = folders.next();
    } else {
      folder = DriveApp.createFolder(dropbox);
    }


    var id = "1L2syfAOm6MiYPtWuWwFZFK_ZtLpLOjNx9EpjHh2IKUY";            
    var ss = SpreadsheetApp.openById(id);

    var blob1 = form.myFile1;
    var blob2 = form.myFile2;
    var blob3 = form.myFile3;

    // check for empty blobs on file attachment uploads
    if( !isEmpty(blob1) ) {
      var file1 = folder.createFile(blob1);
      file1.setDescription("Uploaded by " + form.myName);
      var f1 = '=HYPERLINK("' + file1.getUrl() + '", "File 1")';
    } else {
      var f1 = "nada"; 
    }

    if( !isEmpty(blob2) ) {
      var file2 = folder.createFile(blob2);
      file2.setDescription("Uploaded by " + form.myName);
      var f2 = '=HYPERLINK("' + file2.getUrl() + '", "File 2")';
    } else {
      var f2 = "nada"; 
    }

    if( !isEmpty(blob3) ) {
      var file3 = folder.createFile(blob3);
      file3.setDescription("Uploaded by " + form.myName);
      var f3 = '=HYPERLINK("' + file3.getUrl() + '", "File 3")';
    } else {
      var f3 = "nada"; 
    }    

    Logger.log("test");

    var sheet = ss.getSheetByName('Sheet1');
    sheet.appendRow([form.myName, form.addy, form.twitter, form.status, form.what, form.projTitle, 
                     form.brief, form.full, form.role, form.date, form.website, f1, f2, f3]);


    return "Your entry was successfully uploaded!";



  } catch (error) {

    return error.toString();
  }

}

// New stuff. A function that tests if a string is empty or null
function isEmpty(str) {
    return (!str || 0 === str.length);
}
prismspecs
  • 1,482
  • 6
  • 20
  • 35

2 Answers2

1

Just check if blob1 is null, if it is then trhow an exception.

Pintouch
  • 2,630
  • 1
  • 15
  • 22
1

Can't you just test if a name is specified? I.e. add an if statement that checks that the name is not null and not empty... You might also want to test for things like slashes, in case the user is trying to create subdirectories...

I lifted a test for null or empty from here, but you can roll your own.

function doGet(e) {
  return HtmlService.createHtmlOutputFromFile('form.html');
}

function uploadFiles(form) {

  try {

    var dropbox = "Student Files";
    var folder, folders = DriveApp.getFoldersByName(dropbox);

    if (folders.hasNext()) {
      folder = folders.next();
    } else {
      folder = DriveApp.createFolder(dropbox);
    }


    var id = "1L2syfAOm6MiYPtWuWwFZFK_ZtLpLOjNx9EpjHh2IKUY";            
    var ss = SpreadsheetApp.openById(id);


    var blob1 = form.myFile1;

    if( !isEmpty(blob1) ) {

       var file1 = folder.createFile(blob1);
       file1.setDescription("Uploaded by " + form.myName);
       var f1 = '=HYPERLINK("' + file1.getUrl() + '", "File 1")';


        Logger.log("test");

       var sheet = ss.getSheetByName('Sheet1');
       sheet.appendRow([form.myName, form.addy, form.twitter, form.status, form.what, form.projTitle, 
                     form.brief, form.full, form.role, form.date, form.website, f1]);


       return "Your entry was successfully uploaded!";

    } else {
        return "No file name specified!";
    }


  } catch (error) {

    return error.toString();
  }

}

// New stuff. A function that tests if a string is empty or null
function isEmpty(str) {
    return (!str || 0 === str.length);
}
Community
  • 1
  • 1
mlinth
  • 2,968
  • 6
  • 30
  • 30