【问题标题】:Check file exists before creating Google Drive API在创建 Google Drive API 之前检查文件是否存在
【发布时间】: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


    【解决方案1】:

    您可以通过使用 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

    【讨论】:

    • 谢谢,我已经尝试将一些东西放在一起(更新的问题),不要以为你可以立即看到任何明显的可能是错误的东西吗?谢谢
    • 您是否 npm 安装了模块 async 并将您的整个调用包含在其中?如果您查看developers.google.com/drive/v3/web/search-parameters 并转到底部的Node.js 示例代码,您会发现这是必需的。
    • 谢谢,我看过例子,得到Cannot read property 'forEach' of undefined
    • 我使用服务帐户有什么不同吗?
    猜你喜欢
    • 1970-01-01
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    • 2013-07-22
    • 2015-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多