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

Google Web App上传脚本优化:按Model自动选空闲文件夹

解决方案:Google Web App分片上传的动态文件夹分配修复

核心逻辑梳理

针对需求实现以下关键逻辑:

  • 基于表单选中的Model(01/02/03),筛选Drive中对应前缀的文件夹(格式[Model]-[两位序号])
  • 按序号遍历文件夹,选取第一个无文件的空闲文件夹作为上传目标
  • 若对应Model的3个文件夹均有文件,抛出指定错误提示
  • 修复文件夹命名重复后缀、Model切换后上传目标固定的问题

后端GS脚本修改

1. 新增目标文件夹获取函数

替换原硬编码的upload_folder,实现动态查找逻辑:

// 根据Model编号获取首个空闲文件夹
function getTargetFolder(modelId) {
  // 替换为存放Model文件夹的父文件夹ID
  const parentFolder = DriveApp.getFolderById("你的父文件夹ID");
  const allFolders = parentFolder.getFolders();
  const modelFolders = [];

  // 筛选符合命名规则的Model文件夹
  while (allFolders.hasNext()) {
    const folder = allFolders.next();
    const name = folder.getName();
    if (name.startsWith(`${modelId}-`) && /^\d{2}-\d{2}$/.test(name)) {
      modelFolders.push(folder);
    }
  }

  // 按序号升序排序
  modelFolders.sort((a, b) => {
    const numA = parseInt(a.getName().split("-")[1]);
    const numB = parseInt(b.getName().split("-")[1]);
    return numA - numB;
  });

  // 返回首个空闲文件夹
  for (const folder of modelFolders) {
    if (!folder.getFiles().hasNext()) {
      return folder;
    }
  }

  // 所有文件夹已满时抛出错误
  throw new Error(`等待Model ${modelId}释放`);
}

2. 修复文件夹创建逻辑(解决命名异常)

如果存在自动创建文件夹的逻辑,替换为以下代码保证命名格式正确:

// 为Model创建新文件夹(最多3个)
function createModelFolder(modelId) {
  const parentFolder = DriveApp.getFolderById("你的父文件夹ID");
  const allFolders = parentFolder.getFolders();
  let maxSeq = 0;

  // 统计当前Model的最大文件夹序号
  while (allFolders.hasNext()) {
    const folder = allFolders.next();
    const name = folder.getName();
    if (name.startsWith(`${modelId}-`) && /^\d{2}-\d{2}$/.test(name)) {
      const seq = parseInt(name.split("-")[1]);
      maxSeq = Math.max(maxSeq, seq);
    }
  }

  // 最多创建3个文件夹
  if (maxSeq < 3) {
    const newSeq = maxSeq + 1;
    const newFolderName = `${modelId}-${newSeq.toString().padStart(2, '0')}`;
    return parentFolder.createFolder(newFolderName);
  }

  throw new Error(`Model ${modelId}的文件夹已达上限`);
}

3. 修改上传入口函数

在原上传相关函数(如doPost或分片上传函数)中,替换硬编码文件夹逻辑:

function uploadFilePart(e) {
  try {
    // 从前端获取选中的Model编号
    const modelId = e.parameter.modelId;
    // 获取目标文件夹
    const targetFolder = getTargetFolder(modelId);

    // 后续原有上传逻辑(分片合并、文件保存等)使用targetFolder替代原硬编码文件夹
    // ...
  } catch (err) {
    return {success: false, error: err.message};
  }
}

前端HTML/JS修改(解决Model切换无效问题)

1. 确保Model选择框传递值

在表单中添加或确认Model选择控件:

<select id="modelSelect">
  <option value="01">Model 01</option>
  <option value="02">Model 02</option>
  <option value="03">Model 03</option>
</select>

2. 动态传递Model参数

修改上传触发的JS代码,每次上传时获取当前选中的Model并传递给后端:

function triggerUpload() {
  const selectedModel = document.getElementById('modelSelect').value;
  const file = document.getElementById('fileInput').files[0];

  // 调用后端分片上传函数,传递Model参数
  google.script.run
    .withSuccessHandler(res => {
      if (!res.success) alert(res.error);
      // 上传成功逻辑
    })
    .withFailureHandler(err => alert(err.message))
    .uploadFilePart({
      modelId: selectedModel,
      // 其他上传参数:分片索引、文件块数据、文件名等
      // ...
    });
}

关键问题修复说明

  1. 文件夹命名异常:通过严格的命名规则${modelId}-${两位序号}和padStart方法,避免重复拼接后缀,保证文件夹名称格式统一。
  2. Model切换无效:前端每次上传时动态获取选中的Model值,后端根据该值重新查找对应模型的空闲文件夹,彻底解决目标文件夹固定的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 22:05:20