我正在尝试列出 Dropbox 文件夹和子文件夹中所有文件的名称和 URL。我发现Cooper在类似的question中提出了以下代码片段:
function dbxFileUpload(files) {
var fldr = DriveApp.getFolderById(getGlobal('GPSTracksFolderId'));
var fileBlob=UrlFetchApp.fetch(files[0].link).getBlob();
var file=fldr.createFile(fileBlob);
var fi=formatFileName(file);
var fileInfo={'name':fi.getName(),'type':fileBlob.getContentType(), 'size':fileBlob.getBytes(), 'folder':fldr.getName(), 'id':fi.getId()};
return fileInfo;
}
我不确定如何在我的情况下使用此代码片段。可以提供解决方案的其他来源是不同语言的,即 Php、Android。
我已经创建了一个提供
App Key
和 App Secret
的 Dropbox 应用程序,但由于我的初学者技能,我不确定如何使用 Google Apps 脚本使其工作。任何指导将不胜感激。
我相信您的目标如下。
为了使用 Dropbox API,需要使用访问令牌。在此答案中,假设您已经拥有有效的访问令牌。请注意这一点。
在这种情况下,下面的示例脚本怎么样?
在此示例脚本中,将从您的保管箱中检索文件和文件夹列表。
function myFunction() {
const accessToken = "###"; // Please set your access token.
const path = "";
const url = "https://api.dropboxapi.com/2/files/list_folder";
const res = UrlFetchApp.fetch(url, {
method: "post",
headers: { authorization: "Bearer " + accessToken },
contentType: "application/json",
payload: JSON.stringify({ path, limit: 2000, recursive: true })
});
const obj = JSON.parse(res.getContentText());
console.log(obj);
}
运行该脚本后,得到以下结果。在这种情况下,子文件夹下的文件和文件夹都包含在内。
{
"entries": [
{".tag": "###", "name": "###", "path_lower": "###", "path_display": "###", "id": "id:###"},
,
,
,
],
"cursor": "###",
"has_more": false
}
如果要检索子文件夹下的文件,请将
const path = "";
设置为const path = "/sampleFolderName";
。如果是 const path = "";
,则会检索 Dropbox 中的所有文件和文件夹。
如果
has_more
是true
,请使用list_folder/继续检索下一个列表。
请在“Dropbox API 的list_folder”查看更多相关信息。
关于文件URL,似乎
{fileId}
的https://www.dropbox.com/s/{fileId}/{fileName}?raw=1
与文件ID不同。因此,我又准备了一个示例脚本来检索文件 URL。我认为下面的脚本可以检索它。
function getSharedLink() {
const accessToken = "###"; // Please set your access token.
const fileId = "###"; // Please set file ID.
const url = "https://api.dropboxapi.com/2/sharing/get_file_metadata";
const res = UrlFetchApp.fetch(url, {
method: "post",
headers: { authorization: "Bearer " + accessToken },
contentType: "application/json",
payload: JSON.stringify({ file: fileId })
});
const obj = JSON.parse(res.getContentText());
const sharedLink = obj.preview_url;
console.log(sharedLink);
}