You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Web应用自动导入文件至Google Drive失败问题求助

问题分析与修复方案

你的代码存在两个核心问题,导致文件无法正确上传到Google Drive:


1. 字段名不匹配

前端构造的上传对象中,字节数据存储在bytes字段,但后端uploadFiles函数里尝试读取data.data,字段名完全不对应,这会直接导致data.data为undefined,进而引发Utilities.base64Decode的错误。

2. 字节数据处理方式错误

前端将ArrayBuffer转换为Int8Array数组后传递给后端,但Utilities.base64Decode要求输入的是base64编码字符串,而非原始字节数组,这会导致解码失败。


修正后的完整代码

前端HTML/JS部分(Index.html)

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  </head>
  <body>
    <input type="file" id="idInput" onchange="test(idInput)">
  </body>

  <script>
  function test(photo){
    var file = photo.files[0]; // 直接用传入的photo元素,无需再通过ID获取
    console.log("file content :");
    console.log(file);
    const fr = new FileReader();
    fr.onload = function(e){
      // 将ArrayBuffer转换为base64字符串
      const base64Str = btoa(String.fromCharCode(...new Uint8Array(e.target.result)));
      const obj = {
        filename: file.name,
        mimeType: file.type,
        base64Data: base64Str // 改用base64字符串传递
      };
      console.log("obj content :");
      console.log(obj);
      google.script.run.withSuccessHandler(() => {
        console.log("文件上传成功");
      }).withFailureHandler((err) => {
        console.error("上传失败:", err);
      }).uploadFiles(obj);
    };
    fr.readAsArrayBuffer(file);
  }
  </script>
</html>

后端Google Apps Script部分(Code.gs)

function doGet(){
  return HtmlService.createHtmlOutputFromFile("Index");
}

function uploadFiles(data) {
  // 用正确的字段名读取base64数据,同时使用原始文件名
  const myFile = Utilities.newBlob(
    Utilities.base64Decode(data.base64Data),
    data.mimeType,
    data.filename
  );
  const folder = DriveApp.getFolderById("1yYgC7KCdmVLYjvHutCDqHyKGnevc64rr");
  folder.createFile(myFile);
}

关键修改说明

  • 前端:将ArrayBuffer转换为base64字符串(通过btoa和Uint8Array实现),并将字段名改为base64Data,同时简化了文件获取逻辑(直接使用传入的DOM元素)。
  • 后端:修正字段名为data.base64Data,并使用前端传递的原始文件名data.filename,而非硬编码的"test"。
  • 新增了withFailureHandler用于捕获并打印上传过程中的错误,方便后续调试。

内容的提问来源于stack exchange,提问作者DAM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 16:40:58