如何用Google Apps Script列出Dropbox文件夹及子文件夹的文件名与URL?
你找到的这段dbxFileUpload代码是用来将Dropbox文件上传到Google Drive的,和你要「列出Dropbox文件及子文件夹名称、URL」的需求不匹配,下面给你一套适合新手的Google Apps Script实现方案:
步骤1:准备工作
- 确保你已经有Dropbox App的App Key和App Secret(你已创建完成,先妥善保存)
- 在Google Apps Script编辑器中添加OAuth2库:
- 点击编辑器菜单「资源」→「库」
- 输入库ID:
1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF,点击「添加」 - 选择最新版本,点击「保存」
步骤2:编写授权函数获取访问令牌
// 替换成你的Dropbox App Key和Secret const DBX_APP_KEY = "你的App Key"; const DBX_APP_SECRET = "你的App Secret"; function getDropboxService() { return OAuth2.createService('Dropbox') .setAuthorizationBaseUrl('https://www.dropbox.com/oauth2/authorize') .setTokenUrl('https://api.dropboxapi.com/oauth2/token') .setClientId(DBX_APP_KEY) .setClientSecret(DBX_APP_SECRET) .setCallbackFunction('authCallback') .setPropertyStore(PropertiesService.getUserProperties()) .setScope('files.content.read sharing.read'); // 权限:读取文件内容、读取分享链接 } function authCallback(request) { const service = getDropboxService(); const isAuthorized = service.handleCallback(request); return HtmlService.createHtmlOutput(isAuthorized ? '授权成功!请关闭此页面返回脚本编辑器' : '授权失败'); } function authorizeDropbox() { const service = getDropboxService(); if (!service.hasAccess()) { const authorizationUrl = service.getAuthorizationUrl(); Logger.log('请访问以下链接授权:' + authorizationUrl); SpreadsheetApp.getUi().alert('请点击以下链接授权:\n' + authorizationUrl); } else { Logger.log('已授权'); } }
步骤3:编写递归遍历Dropbox文件的函数
下面的函数会递归遍历指定Dropbox文件夹(默认根目录),收集所有文件的名称和临时访问URL:
function listDropboxFiles(folderPath = '') { const service = getDropboxService(); if (!service.hasAccess()) { throw new Error('未授权,请先运行authorizeDropbox函数'); } const allFiles = []; let cursor = null; do { // 调用Dropbox API获取文件列表 const apiUrl = cursor ? 'https://api.dropboxapi.com/2/files/list_folder/continue' : 'https://api.dropboxapi.com/2/files/list_folder'; const payload = cursor ? { cursor: cursor } : { path: folderPath, recursive: true, include_media_info: false, include_deleted: false }; const response = UrlFetchApp.fetch(apiUrl, { method: 'POST', headers: { 'Authorization': 'Bearer ' + service.getAccessToken(), 'Content-Type': 'application/json' }, payload: JSON.stringify(payload) }); const result = JSON.parse(response.getContentText()); cursor = result.cursor; // 处理当前页的文件 result.entries.forEach(entry => { if (entry['.tag'] === 'file') { // 获取文件临时访问URL const linkResponse = UrlFetchApp.fetch('https://api.dropboxapi.com/2/files/get_temporary_link', { method: 'POST', headers: { 'Authorization': 'Bearer ' + service.getAccessToken(), 'Content-Type': 'application/json' }, payload: JSON.stringify({ path: entry.path_lower }) }); const linkData = JSON.parse(linkResponse.getContentText()); allFiles.push({ name: entry.name, path: entry.path_lower, url: linkData.link }); } }); } while (!result.has_more); // 输出结果到日志 Logger.log('共找到' + allFiles.length + '个文件:'); allFiles.forEach(file => { Logger.log(`名称:${file.name},URL:${file.url}`); }); // 可选:写入到当前Google表格 const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); sheet.clear(); sheet.appendRow(['文件名', '文件路径', '访问URL']); allFiles.forEach(file => { sheet.appendRow([file.name, file.path, file.url]); }); return allFiles; }
步骤4:运行流程
- 替换代码中的
DBX_APP_KEY和DBX_APP_SECRET为你的实际值 - 运行
authorizeDropbox函数,按照提示完成Dropbox授权 - 运行
listDropboxFiles函数,默认遍历根目录;如果要指定文件夹,传入路径,比如listDropboxFiles('/我的文件夹') - 查看日志(编辑器菜单「查看」→「日志」)或者当前表格内容,就能看到所有文件的名称和URL
补充说明
- 代码中使用的是临时访问URL,有效期4小时;如果需要永久分享链接,可以替换
get_temporary_link为sharing/create_shared_link_with_settingsAPI,同时调整权限范围 - 递归遍历会处理所有子文件夹,若文件夹内容较多,注意Google Apps Script的6分钟超时限制
内容的提问来源于stack exchange,提问作者EagleEye
相关产品推荐
相关产品推荐

