简体   繁体   English

如果未指定文件上传,则Google Apps脚本中将发生错误

[英]error in google apps script if no file upload is specified

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); 似乎它确实不喜欢的行是: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);
}

Can't you just test if a name is specified? 您不能只是测试是否指定了名称? Ie 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... 即添加一条if语句,以检查名称是否不为null也不为空...如果用户试图创建子目录,您可能还想测试斜线之类的内容...

I lifted a test for null or empty from here , but you can roll your own. 我从这里取消了null或empty测试,但是您可以自己滚动。

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

只需检查blob1是否为null ,然后检查是否为异常。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Google Apps脚本:文件上传进度指示器 - Google Apps Script: file upload progress indicator Google Apps脚本创建带有文件上传的表单 - Google Apps Script Create form with file upload HTTP POST和Google Apps脚本文件上传 - HTTP POST and Google Apps Script file upload 使用 Google Apps 脚本将文件上传到我的 google 驱动器(在 GOOGLE 中没有表格) - Upload file to my google drive with Google Apps Script (NO FORM IN GOOGLE) 使用 Google 应用脚本在 Google 表格中上传 PDF 文件 - Upload PDF file in Google sheet using Google apps script 使用 Google Apps 脚本将文件从 URL 上传到 Google 云端硬盘 - Upload a file from URL to Google Drive with Google Apps Script 使用Google Apps脚本将文本文件上传到Google云端硬盘 - Upload text file to Google Drive with Google Apps Script Google Apps脚本文件上传(通过HTML表单)仅在脚本被“绑定”时才有效(测试独立脚本时,HTTP 403错误) - Google Apps Script file upload (by HTML form) only works when script is “bound” (when standalone script tested, HTTP 403 error) 使用html服务使用google apps脚本上传文件 - Upload file with google apps script using html service 不是 Google Apps 脚本中的 function 错误 - is not a function error in Google Apps Script
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM