我已经整理了一个在Google云端硬盘中的文件夹中创建文件的脚本,当我对该文件进行修改并将其推回时,它将创建一个新版本(这显然是正确的)。我想要做的是检查文件是否存在(如果可以的话,按名称存在),然后更新该文件(如果存在)或创建新文件(如果不存在)。
# index.js
const google = require('googleapis');
const fs = require('fs');
const config = require('./creds.json');
const drive = google.drive('v3');
const targetFolderId = "123456789"
const jwtClient = new google.auth.JWT(
config.client_email,
null,
config.private_key,
['https://www.googleapis.com/auth/drive'],
null
);
jwtClient.authorize((authErr) => {
if (authErr) {
console.log(authErr);
return;
}
const fileMetadata = {
name: './file.xlsx,
parents: [targetFolderId]
};
const media = {
mimeType: 'application/vnd.ms-excel',
body: fs.createReadStream('./file.xlsx' )
};
drive.files.create({
auth: jwtClient,
resource: fileMetadata,
media,
fields: 'id'
}, (err, file) => {
if (err) {
console.log(err);
return;
}
console.log('Uploaded File Id: ', file.data.id);
});
});
正如D Levine所提到的,我可以使用drive.files.list
,但我在查找文件时遇到了问题。我设置了一个服务帐户,因此不确定这是否会产生影响。我的代码在下面,但我现在得到的是undefined
返回。我也想在特定文件夹中搜索,但似乎无法在任何地方找到此选项。
// Check File exists
drive.files.list({
auth: jwtClient,
spaces: 'drive',
q: "name='liverpool_away.xlsx'",
pageSize: 10,
fields: "nextPageToken, files(id, name)"
}, function(err, response) {
if (err) {
console.log('The API returned an error: ' + err);
return;
}
var files = response.files;
console.log("Files: " + files);
if (files.length == 0) {
console.log('No files found.');
} else {
console.log('Files:');
for (var i = 0; i < files.length; i++) {
var file = files[i];
console.log('%s (%s)', file.name, file.id);
}
}
});
答案 0 :(得分:0)
您可以通过使用driveService.files()。list()按名称搜索来查找文件是否存在。如果您收到1个结果,那么这是您要查找的文件,您可以获取文件ID。如果您收到0结果,则该文件不存在。
这里有一个描述如何搜索的页面(底部是示例代码):https://developers.google.com/drive/v3/web/search-parameters
此处记录了REST端点:https://developers.google.com/drive/v3/reference/files/list