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

替换ResumableUploadForGoogleDrive2时提示缺少必填参数,但代码已传入对应参数的问题求助

替换ResumableUploadForGoogleDrive2时提示缺少必填参数,但代码已传入对应参数的问题求助

嗨,我仔细看了你的问题和代码,马上就找到问题所在啦——ResumableUploadForGoogleDrive2(v2)的参数要求和v1版本完全不一样,你现在传的参数结构不符合v2的预期,才会触发这个报错。

问题核心:v1和v2的参数结构差异

先看v2源码里的初始化判断逻辑:

if (!("accessToken" in resource) || !("file" in resource)) {
  reject({
    Error: "There are no required parameters. accessToken, fileName, fileSize, fileType and fileBuffer are required.",
  });
  return;
}

这里有个小文案bug:错误提示还停留在v1的参数要求,但实际代码判断的是resource里必须包含accessToken和原始的File对象,而不是你现在传的fileBuffer、fileName这些拆分属性。

你的代码里传给v2的resource只包含了拆分后的文件属性,但没有传入原始的File对象,所以v2直接判定缺少必填参数,抛出了错误。而且v2的设计初衷就是避免把整个文件加载到内存,它会自己处理文件的切片和读取,根本不需要你提前用FileReader把整个文件读成ArrayBuffer(这也是它解决v1内存溢出问题的关键)。

修复方案:调整参数结构,使用原始File对象

你只需要修改upload函数的代码,去掉不必要的FileReader逻辑,直接把原始的File对象传给v2的resource即可:

修改后的upload函数:

function upload({ accessToken, file, idx, newFolderId }) {
    return new Promise((resolve, reject) => {
        var id = `p_${idx}`;
        var div = document.createElement("div");
        div.id = id;
        document.getElementById("progress").appendChild(div);
        document.getElementById(id).innerHTML = "Initializing.";
        
        // 注意:v2需要的是原始File对象,不是拆分的属性
        const resource = {
            file: file, // 直接传入循环拿到的原始File对象
            accessToken: accessToken,
            folderId: newFolderId,
            // 可选:如果需要自定义分片大小,可以加上这个参数(默认是50MB)
            // chunkSize: 52428800
        };
        
        const ru = new ResumableUploadToGoogleDrive();
        ru.Do(resource, function (res, err) {
            if (err) {
                reject(err);
                return;
            }
            console.log(res);
            let msg = "";
            if (res.status == "Uploading") {
                msg = Math.round((res.progressNumber.current / res.progressNumber.end) * 100) + `% (${file.name})`;
            } else {
                msg = `${res.status} (${file.name})`;
            }
            if (res.status == "Done") {
                resolve(res.result);
            }
            document.getElementById(id).innerText = msg;
        });
    });
}

为什么这样改能解决问题?

  1. v2的初始化逻辑会检测到resource里的accessToken和file参数,不会再抛出缺少必填项的错误
  2. v2内部会自动从file对象中获取文件名、大小、类型等信息,不需要你手动拆分
  3. v2会按切片读取文件内容,不会把整个大文件加载到内存里,完美解决你之前遇到的内存溢出问题

这样修改后,应该就能正常使用v2版本的上传功能啦,同时也能处理大量大文件的上传需求~

备注:内容来源于stack exchange,提问作者Dan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 03:09:30