Google API、drive.files.list 且仅返回子文件
Google API, drive.files.list and returning child files only
我在 NodeJS 中使用“googleapis”库,我试图 return 当前指定文件夹中的文件和文件夹列表,但我发现 drive.files.list
returns 用户已被授予读取权限的所有文件。
我的目标是能够下载给定文件夹下的文件夹结构,然后 NodeJS 应用程序可以以有意义的方式使用它。
我使用的代码如下:
const fs = require('fs');
const google = require('googleapis');
const OAuth2 = google.auth.OAuth2;
const key = require('./key.json');
const jwtClient = new google.auth.JWT(
key.client_email,
null,
key.private_key,
['https://www.googleapis.com/auth/drive'],
null
);
const drive = google.drive({
version: 'v3',
auth: jwtClient
});
jwtClient.authorize(function (err, tokens) {
if (err) {
console.log(err);
return;
}
// Make an authorized request to list Drive files.
drive.files.list({
includeRemoved: false,
spaces: 'drive',
fileId: 'the-file-id-of-the-folder'
}, function (err, resp) {
if (!err) {
var i;
var files = resp.files;
for (i=0; i<files.length; i++) {
if (files[i].mimeType !== 'application/vnd.google-apps.folder') {
console.log('file: ' + files[i].name);
} else {
console.log('directory: ' + files[i].name);
}
console.log(files[i]);
}
} else {
console.log('error: ', err);
}
});
});
请注意,我确实尝试了 drive.files.get
端点,但没有 alt: 'media'
参数,但它似乎 return drive.files.list
调用的更多元数据。
进一步探索导致'Search Parameters' 页面,它表明在 API 的 v3 中还有 'fields' 和 'q' 参数,这样,列表操作变为(ES6 代码):
var fileId = '0B0gSXXXXXXXXXXXXXXXXb0hpaWM'
drive.files.list({
includeRemoved: false,
spaces: 'drive',
fileId: fileId,
fields: 'nextPageToken, files(id, name, parents, mimeType, modifiedTime)',
q: `'${fileId}' in parents`
}, function (err, response) {
// TODO handle response
});
请注意,有关其他元数据,请参阅:
https://developers.google.com/drive/v3/reference/files#resource
我在 NodeJS 中使用“googleapis”库,我试图 return 当前指定文件夹中的文件和文件夹列表,但我发现 drive.files.list
returns 用户已被授予读取权限的所有文件。
我的目标是能够下载给定文件夹下的文件夹结构,然后 NodeJS 应用程序可以以有意义的方式使用它。
我使用的代码如下:
const fs = require('fs');
const google = require('googleapis');
const OAuth2 = google.auth.OAuth2;
const key = require('./key.json');
const jwtClient = new google.auth.JWT(
key.client_email,
null,
key.private_key,
['https://www.googleapis.com/auth/drive'],
null
);
const drive = google.drive({
version: 'v3',
auth: jwtClient
});
jwtClient.authorize(function (err, tokens) {
if (err) {
console.log(err);
return;
}
// Make an authorized request to list Drive files.
drive.files.list({
includeRemoved: false,
spaces: 'drive',
fileId: 'the-file-id-of-the-folder'
}, function (err, resp) {
if (!err) {
var i;
var files = resp.files;
for (i=0; i<files.length; i++) {
if (files[i].mimeType !== 'application/vnd.google-apps.folder') {
console.log('file: ' + files[i].name);
} else {
console.log('directory: ' + files[i].name);
}
console.log(files[i]);
}
} else {
console.log('error: ', err);
}
});
});
请注意,我确实尝试了 drive.files.get
端点,但没有 alt: 'media'
参数,但它似乎 return drive.files.list
调用的更多元数据。
进一步探索导致'Search Parameters' 页面,它表明在 API 的 v3 中还有 'fields' 和 'q' 参数,这样,列表操作变为(ES6 代码):
var fileId = '0B0gSXXXXXXXXXXXXXXXXb0hpaWM'
drive.files.list({
includeRemoved: false,
spaces: 'drive',
fileId: fileId,
fields: 'nextPageToken, files(id, name, parents, mimeType, modifiedTime)',
q: `'${fileId}' in parents`
}, function (err, response) {
// TODO handle response
});
请注意,有关其他元数据,请参阅:
https://developers.google.com/drive/v3/reference/files#resource