在创建Google Drive API之前,检查文件是否存在

时间:2018-02-10 20:47:38

标签: node.js google-drive-api google-api-nodejs-client

我已经整理了一个在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);
  }
 }
});

1 个答案:

答案 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