【发布时间】:2018-08-07 06:23:47
【问题描述】:
我已经编写了一个脚本,该脚本在 Google Drive 的文件夹中创建一个文件,当我对该文件进行修改并将其推回时,它将创建一个新版本(这显然是正确的)。我想做的是首先检查文件是否存在(如果可以的话,按名称),然后如果存在则更新该文件,如果不存在则创建新文件。
# 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);
}
}
});
【问题讨论】:
标签: node.js google-drive-api google-api-nodejs-client