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

Google Scripts调用YouTube API上传共享驱动器非自有视频失败求助

解决思路与修改方案

问题根源

你遇到的「Processing abandoned」本质是权限与文件获取方式的问题:

  • 原代码通过直接调用Drive API的alt=media端点下载文件,但针对共享驱动器中他人拥有的文件,这个请求缺少supportsAllDrives=true参数,导致权限验证不通过,获取到的文件内容可能不完整或带有权限异常标记,传到YouTube后触发处理失败。
  • 复制文件到自己名下后,文件权限归属于当前用户,原方法就能正常工作,验证了这一点。

可行修改方案

用DriveApp.getFileById().getBlob()替代原有的UrlFetchApp.fetch()方式,原因是:

  • DriveApp是Google Apps Script的原生服务,会自动处理共享驱动器的权限上下文,只要你对目标文件有下载权限,就能稳定获取Blob。
  • 无需手动构造API请求和处理权限参数,避免因参数遗漏导致的权限问题。

修改后的核心代码片段

// 替换原有的UrlFetchApp.fetch部分
var file = DriveApp.getFileById(match);
var video = file.getBlob(); // 直接获取文件Blob

完整修改后的代码

function upload() {
  var driveurl = `https://drive.google.com/file/d/AAAAAAAAAAAAAAAAAAAAAAAAA/view?usp=share_link`;
  var match = driveurl.match(/([a-z0-9_-]{25,})[$/&?]/i).pop();
  var title = "title";
  var description = "test";
  var topics = ["TEST"]; // 注意:tags需要是数组类型,原代码字符串会导致问题

  // 直接通过DriveApp获取文件Blob
  var file = DriveApp.getFileById(match);
  var video = file.getBlob();

  response = YouTube.Videos.insert({
    snippet:{
      title: title,
      description: description,
      tags: topics
    },
    status:{
      privacyStatus: "public",
    },
  },
  "snippet,status",
  video
  );
  
  Logger.log(JSON.stringify(response));    
  Logger.log(response.id);
}

额外注意事项

  • 权限确认:确保你对共享文件拥有下载权限(仅查看权限无法获取Blob),如果权限不足,联系文件所有者调整。
  • OAuth授权:修改代码后第一次运行,需要重新授权脚本,确保包含Drive文件访问的权限。
  • tags参数修正:原代码中topics是字符串类型,但YouTube API要求tags是数组,修改为["TEST"]避免潜在报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 19:40:34