当前位置: 首页 > 知识库问答 >
问题:

将文件上载到谷歌工作表

夏侯瑞
2023-03-14

我正试图上传一个PDF文件到谷歌硬盘,并在谷歌表单中插入该文件的链接。以下是ajax:

    $.ajax({
    type: 'POST',
    url: 'https://script.google.com/macros/s/AKfycbxyjjBv84uONFouZaiNeC2xwoMPP3p-3dzYxbQBCbJnEza0aPn-/exec',
    data: serializedData,
    success: function(result) {
    var myMessage = $(document.activeElement).attr('id');
    $('#sucessMessage2').html('<div class=\"successActive\">Your application has been successfully sent</div>');
    document.getElementById("regform").reset();
    },
    error : function(error) {
    alert('Error: Something went wrong. Please refresh the page and try again');
    }
});

以下是HTML:

    <form id="regform">
    <input id="FirstName" tabindex="1" name="FirstName" type="text" placeholder="First Name *" />
    <input id="LastName" tabindex="2" name="LastName" type="text" placeholder="Last Name *" />
    <input id="Occupation" tabindex="3" name="Occupation" type="text" placeholder="Occupation" />
    <input name="Resume" type="file" tabindex="4" /><br/>
    <div class="successMessage" id="sucessMessage2"></div>
    <input class="btn-submit" id="submitFormTwo" tabindex="5" type="submit" value="Submit Application to Rent" />
    </form>

和代码。一般事务:

    var SHEET_NAME = "Sheet1";
    var SCRIPT_PROP = PropertiesService.getScriptProperties(); // new property service
    function doGet(e){
    return handleResponse(e);
    }

    function doPost(e){
    return handleResponse(e);
    }

    function handleResponse(e) {
    var lock = LockService.getPublicLock();
    lock.waitLock(30000);  // wait 30 seconds before conceding defeat.

    try {
    var doc = SpreadsheetApp.openById(SCRIPT_PROP.getProperty("key"));
    var sheet = doc.getSheetByName(SHEET_NAME);
    var headRow = e.parameter.header_row || 1;
    var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
    var nextRow = sheet.getLastRow()+1; // get next row
    var row = [];
    for (i in headers){
    if (headers[i] == "Timestamp"){ // special case if you include a 'Timestamp' column
    row.push(new Date());
    } else { // else use header name to get data
    row.push(e.parameter[headers[i]]);
    }
    }
    sheet.getRange(nextRow, 1, 1, row.length).setValues([row]);
    return ContentService
    .createTextOutput(JSON.stringify({"result":"success", "row": nextRow}))
    .setMimeType(ContentService.MimeType.JSON);
    } catch(e){
    return ContentService
    .createTextOutput(JSON.stringify({"result":"error", "error": e}))
    .setMimeType(ContentService.MimeType.JSON);
    } finally { //release lock
    lock.releaseLock();
    }
    }
    function setup() {
    var doc = SpreadsheetApp.getActiveSpreadsheet();
    SCRIPT_PROP.setProperty("key", doc.getId());
}

一切都在谷歌表格中填充,但我不知道如何让简历上传到谷歌驱动器并将链接添加到谷歌表格。

共有1个答案

韦寒
2023-03-14
  1. 修改

<代码>

<代码>

<代码>

function formSubmit() {
  var pdf = document.getElementById("pdf").files[0];
  var reader  = new FileReader();
    if (pdf) {
        reader.readAsDataURL(pdf); 
        reader.onloadend = function () {
           google.script.run.getResume(reader.result);
          }           
     }       
}
function getResume(pdf){   
  var mimeType = pdf.substring(5,pdf.indexOf(';'));
  var bytes = Utilities.base64Decode(pdf.substr(pdf.indexOf('base64,')+7));
  var title='my_pdf';
  var blob = Utilities.newBlob(bytes, mimeType, title);
  var file=DriveApp.createFile(blob);    
  var link = file.getUrl();
  Logger.log(link);
}

说明:使用FileReader将pdf文件的内容转换为数据URL。应用程序脚本可以使用此数据URL将文件作为blob读取,并将blob转换为驱动器上的文件。

使现代化

如何使用google完全传递表单数据的示例。剧本不使用Ajax运行

指数html:

<form id="regform">
<input id="FirstName" tabindex="1" name="FirstName" type="text" placeholder="First Name *" />
<input id="LastName" tabindex="2" name="LastName" type="text" placeholder="Last Name *" />
<input id="Occupation" tabindex="3" name="Occupation" type="text" placeholder="Occupation" />
<input id = "pdf" name="Resume" type="file" tabindex="4" /><br/>
<input class="btn-submit" id="submitFormTwo" tabindex="5" type="submit" onClick="formSubmit()" value="Submit Application to Rent" />
    </form>
<script>
function formSubmit() {
  var firstName = document.getElementById("FirstName").value;
  var lastName = document.getElementById("LastName").value;
  var occupation = document.getElementById("Occupation").value;
  var pdf = document.getElementById("pdf").files[0];
  var reader  = new FileReader();
    if (pdf) {
        reader.readAsDataURL(pdf); 
        reader.onloadend = function () {
           google.script.run.withSuccessHandler(success).withFailureHandler(error).getResume(firstName, lastName, occupation, reader.result);
          }           
     }       
}
function success(){
alert ("Your application has been successfully sent");
}
function error(){
alert ("There was an error");
} 
</script>

密码gs

function doGet(){
  return HtmlService.createHtmlOutput("index.html");
}
function getResume(firstName, lastName, occupation, pdf){ 
  var mimeType = pdf.substring(5,pdf.indexOf(';'));
  var bytes = Utilities.base64Decode(pdf.substr(pdf.indexOf('base64,')+7));
  var title='my_pdf';
  var blob = Utilities.newBlob(bytes, mimeType, title);
  var file=DriveApp.createFile(blob);    
  var link = file.getUrl();
  var doc = SpreadsheetApp.openById(SCRIPT_PROP.getProperty("key"));
  var sheet = doc.getSheetByName(SHEET_NAME);  
  var values = [firstName, lastName, occupation, link];
  var nextRow = sheet.getLastRow()+1;
  sheet.getRange(nextRow, 1, 1, values.length).setValues([values]);

}

function setup() {
  var doc = SpreadsheetApp.getActiveSpreadsheet();
  SCRIPT_PROP.setProperty("key", doc.getId());
}

 类似资料:
  • 然而,下载URL与paremeters有一些有趣的地方,它看起来如下所示: (在url中,'&\;‘实际上没有'\',但我把它放在帖子中,以避免将其转义为'&')。 那么这里是什么情况;我是否有3个参数h、e、gd,或者我有一个参数h,其值,或者我有以下3个参数值对:,,(我认为是这样,而且似乎是一个bug)? 为了形成一个正确的http请求,我需要清楚地知道参数、名称和值是什么,但是我有一个令人

  • 我目前面临的问题与谷歌云存储, 我能够下载对象上传到谷歌云存储,但当天晚些时候,我开始得到的错误,因为"这个网站无法到达" 我在c#中以编程方式创建了一个bucket,代码如下: 因此,创建存储桶的设置如下: 默认存储类别:多地区 位置:美国(美国多个地区) 公共访问:每个对象 生命周期:无 访问控制模型:存储桶策略

  • 我正在尝试使用谷歌云存储JSON API将图像上传到谷歌云存储桶中。文件正在上载,但没有显示任何内容。 我正在通过以下方式上载图像:- 图像1 看图片1,文件上传成功。但当我点击它查看它时,它显示如图2所示。 图像2

  • 我想按照官方文档中提供的示例将一个文件上传到Google云存储 然而,我得到了一个错误: 线程“main”com.google.cloud.storage.StorageException中的异常:获取服务帐户的访问令牌时出错:400个错误请求{“错误”:“无效的授予”、“错误描述”:“无效的JWT:令牌必须是短期令牌(60分钟)并且在合理的时间范围内。请检查JWT声明中的iat和exp值。”位于

  • 我尝试使用“读取多个范围”示例: https://sheets.googleapis.com/v4/spreadsheets/{SpreadsheetID}/values:batchGet?范围=表1!B:B 来自:Google Sheets API v4示例我用我的电子表格ID替换了"spreadsheetId"。但当我发送GET请求(通过邮递员)我收到: 比我以前https://develop

  • 所以我最初是想在我的应用程序中添加Firebase认证谷歌登录。当这没有奏效的时候,我决定尝试一下Firebase的官方Quickstart应用程序。我下载了它,导入到Android Studio,按照他们所有的方向去做。还是不行。 发生的是我点击“登录”按钮,一个对话框将出现在我选择我的个人资料,然后只是什么都没有。调试时,我发现方法返回false,我不知道该怎么做。 设备详细信息: > And