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);
}
 
     
     
    