如何通过Drive API与Javascript自动获取Google Drive文件ID至网站
解决方案
前提条件
- 将目标Google Drive文件夹设置为公开可查看(权限设置为“知道链接的任何人都能查看”)
- 确保你的API_KEY已启用Drive API(在Google Cloud控制台的API库中开启Drive API)
最小化可行前端代码
<script src="https://apis.google.com/js/api.js"></script> <script type="text/javascript"> var fileArray = []; const API_KEY = '你的API_KEY'; const FOLDER_ID = '目标文件夹的ID'; // 从Drive文件夹URL中提取,比如https://drive.google.com/drive/folders/XXX中的XXX async function loadDriveApi() { await gapi.client.load('https://www.googleapis.com/discovery/v1/apis/drive/v3/rest'); gapi.client.setApiKey(API_KEY); await fetchAudioFiles(); } async function fetchAudioFiles() { try { const response = await gapi.client.drive.files.list({ q: `'${FOLDER_ID}' in parents and mimeType contains 'audio/'`, // 只筛选文件夹下的音频文件 fields: 'files(id)', // 只获取文件ID,减少数据量 pageSize: 1000 // 单次最多返回1000条,若文件超过1000需要处理分页 }); const files = response.result.files; if (files && files.length > 0) { fileArray = files.map(file => `https://docs.google.com/uc?export=open&id=${file.id}`); console.log('生成的音频链接数组:', fileArray); // 这里可以调用你的随机播放逻辑 } else { console.log('文件夹中没有找到音频文件'); } } catch (err) { console.error('获取文件列表失败:', err); } } // 页面加载时初始化API window.addEventListener('load', loadDriveApi); </script>
关键说明
- 无需用户登录:因为文件夹是公开的,仅使用API_KEY即可访问元数据,不需要OAuth认证(可直接去掉CLIENT_ID、CLIENT_SECRET等OAuth相关参数)
- 筛选音频文件:通过
mimeType contains 'audio/'确保只获取音频文件,避免混入其他类型文件 - 分页处理:如果文件夹内文件超过1000个,需要处理
nextPageToken来获取所有文件,示例代码简化为单次请求,若需要可扩展分页逻辑 - 链接格式:使用
https://docs.google.com/uc?export=open&id=FILE_ID确保音频可以直接在浏览器中播放
原代码问题修正
- 移除
require('googleapis'):这是Node.js环境的模块,前端浏览器无法使用 - 修正
files.list参数:原代码用fileId错误,需用q参数指定父文件夹 - 为函数添加
async关键字:确保await能正常使用 - 正确获取文件列表:原代码
files变量未定义,需从response.result.files中获取
内容的提问来源于stack exchange,提问作者klaviana
相关产品推荐
相关产品推荐

