如何用Google Apps Script获取Dropbox文件的公开可访问链接?
解决Dropbox公开链接获取问题
要获取无需登录即可访问的Dropbox公开链接,需替换原代码中使用的sharing/get_file_metadata接口,改用sharing/create_shared_link_with_settings接口创建(或获取已有的)公开共享链接。以下是修改后的完整代码:
function listDropBoxFiles() { const accessToken = "###"; // 请设置你的访问令牌 const path = "/Master Folder"; let url = "https://api.dropboxapi.com/2/files/list_folder"; let has_more = false; const option = { method: "post", headers: { authorization: "Bearer " + accessToken }, contentType: "application/json", payload: JSON.stringify({ path, limit: 2000, recursive: true }) }; let values = []; var fileDetails = []; do { const res = UrlFetchApp.fetch(url, option); let obj = JSON.parse(res.getContentText()); values = [...values, ...obj.entries]; has_more = obj.has_more; if (has_more) { url = "https://api.dropboxapi.com/2/files/list_folder/continue"; option.payload = JSON.stringify({ cursor: obj.cursor }); } } while (has_more); for (var i = 0; i < values.length; i++) { var entry = values[i]; // 检查是否为文件 if (entry['.tag'] === 'file') { var fileUrl = getPublicFileUrl(accessToken, entry.id); fileDetails.push([ entry.name, fileUrl, Utilities.formatDate(new Date(entry.client_modified), Session.getScriptTimeZone(), 'dd/MM/yyyy hh:mm a'), Utilities.formatDate(new Date(entry.server_modified), Session.getScriptTimeZone(), 'dd/MM/yyyy hh:mm a') ]); } } console.log(fileDetails); detailSheet.getRange(detailSheet.getLastRow()+1,1,fileDetails.length,fileDetails[0].length).setValues(fileDetails); } function getPublicFileUrl(accessToken, fileId) { const url = "https://api.dropboxapi.com/2/sharing/create_shared_link_with_settings"; const res = UrlFetchApp.fetch(url, { method: "post", headers: { authorization: "Bearer " + accessToken }, contentType: "application/json", payload: JSON.stringify({ file: fileId, settings: { visibility: "public", // 设置为公开访问 allow_download: true // 允许下载(可选,根据需求调整) } }) }); const obj = JSON.parse(res.getContentText()); // 返回公开共享链接 return obj.url; }
修改说明:
- 替换API接口:将获取链接的接口从
sharing/get_file_metadata改为sharing/create_shared_link_with_settings,该接口专门用于创建或获取带权限设置的共享链接。 - 设置公开权限:在请求payload中添加
settings参数,指定visibility: "public",确保生成的链接无需登录即可访问。 - 调整返回字段:从接口返回结果中提取
url字段,而非原代码的preview_url,这个url就是公开可访问的共享链接。 - 权限要求:确保你的Dropbox访问令牌拥有
sharing.write权限,否则无法创建公开共享链接。
注意事项:
- 如果目标文件已存在公开共享链接,调用该接口会直接返回已有的链接,不会重复创建。
- 若需强制生成新的链接,可以在payload中添加
override_existing: true参数。
内容的提问来源于stack exchange,提问作者EagleEye
相关产品推荐
相关产品推荐

