我目前遇到了Google Drive API的问题(通过Node.js googleapis
包使用,googleapis.google.drive
)
当我使用drive.list()
函数时,它总是返回所有的子代,recursively,所以我得到所有的子代,而不仅仅是所有的子代.除此之外,每当我将drive.get()
与fields
参数中指定的"Parents"一起使用时,它总是只返回一个父项,除非我筛选了特定的父项,否则它返回的父项始终是根ID.
这样,如果不分别 for each 文件夹调用一组API,我甚至无法在 node 中创建一个适当的文件树,我不确定我是否只是做错了什么,或者API是否仅仅是如此有限.有没有办法真正得到直接的父母/子元素?
我遇到的例子:
const drive = // in here I have my authorised googleapis.google.drive instance
drive.files.list({
q: `'${rootid}' in parents`,
fields: `files(id, name, parents)`
})
我的文件组织 struct 如下所示:
"root"
- "test" (folder, located in root)
- "test.txt" (txt file, located in test)
上面的代码示例列出了测试文件夹和test.txt文本文件,而且不仅列出了直接的子文件夹(在本例中只列出了文件夹).
此外,(使用相同的文件 struct )获取文件的父级还有一个问题,代码如下:
drive.files.get({
fileId: someFileId,
fields: `parents`
})
然而,这似乎总是返回根文件夹的id,除非我在q参数中指定了父文件夹,在这种情况下,它只返回我放在q参数中的父文件夹的id,而不返回任何其他父文件夹的id.这使得文件的实际父文件是什么变得非常不清楚.
我该如何处理这两个问题呢?
如果我需要在我的问题中添加任何信息,请告诉我, 感谢您的阅读!
对于我的情况,上面的大小写不够具体,以下是我的代码的相关部分的直接副本:
const { google } = require('googleapis')
const drive = google.drive({
version: `v3`,
auth: driveClient,
})
const listFolders = async (foldersOnly = true, parent = `root`) => await drive.files.list({
q: `'${parent}' in parents ${foldersOnly ? `and mimeType='application/vnd.google-apps.folder'` : ``}`,
fields: `nextPageToken, files(id, name, parents)`,
})
// actually call the functions
listFolders(false).then((r) => console.log(r?.data?.files)).catch(console.log) // logs result 1
listFolders(false, `1MheLbFrr2LIn_KKa7XHDGvw1NVKIWCvY`).then((r) => console.log(r?.data?.files)).catch(console.log) // logs result 2
drive.files.get({
fileId: `1eRm-efvklMQcsSggdjorOgsWwmeQ07pu`,
fields: `parents`,
}).then((r) => console.log(r.data)).catch(console.log) // logs result 3