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

通过Google Drive API v3下载文件时保留真实文件名的实现方案

解决Google Drive API下载文件显示FileID而非真实文件名的问题

要让下载的文件使用真实名称,核心是先获取文件的元数据(包含真实文件名),再通过响应头告知浏览器正确的文件名,具体实现如下:

核心思路

  1. 调用Google Drive API的Files.get接口,传入FileID获取文件元数据(其中name字段即为真实文件名)
  2. 向客户端返回响应时,设置Content-Disposition响应头,明确指定下载的文件名

修改后的代码示例

async Download(fileID, res, type='stream') {
    try {
        var Google = await CloudStorage.Initialize();
        
        // 第一步:调用Files.get接口获取文件真实名称
        const metadata = await new Promise((resolve, reject) => {
            https.get(Google.API.STORAGE.Files.Get(fileID), {
                headers: {
                    "Authorization": "Bearer " + Google.AccessToken.token
                }
            }, (metaRes) => {
                let metaDataStr = '';
                metaRes.on('data', chunk => metaDataStr += chunk);
                metaRes.on('end', () => resolve(JSON.parse(metaDataStr)));
                metaRes.on('error', reject);
            }).end();
        });
        const realFileName = metadata.name;

        // 第二步:下载文件并设置正确的响应头
        https.get(Google.API.STORAGE.Files.Download(fileID), {
            headers: {
                "Authorization": "Bearer " + Google.AccessToken.token
            },
            responseType: type
        }, (resApi) => {
            // 设置Content-Disposition头,指定下载文件名
            res.writeHead(resApi.statusCode, {
                'Content-Disposition': `attachment; filename="${encodeURIComponent(realFileName)}"`,
                'Content-Type': resApi.headers['content-type'] || 'application/octet-stream'
            });
            resApi.pipe(res);
        }).on('error', () => {
            res.status(500).send('文件下载失败');
        }).end();
    } catch (err) {
        res.status(500).send('获取文件信息失败');
    }
}

关键细节说明

  • Content-Disposition头的attachment值会强制浏览器触发下载行为,filename参数指定真实文件名,用encodeURIComponent处理特殊字符可避免文件名乱码
  • 替换原有的text/plain为application/octet-stream(或复用Google Drive返回的Content-Type),更适配二进制安装包、可执行文件的传输场景
  • 增加了错误捕获逻辑,避免API调用失败导致服务异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 14:20:22