Node JS Google Drive api方法列表返回已删除文件

Posted

技术标签:

【中文标题】Node JS Google Drive api方法列表返回已删除文件【英文标题】:Node JS Google Drive api method list returns deleted files 【发布时间】:2021-09-18 03:08:44 【问题描述】:

我正在使用以下函数从 Google Drive 获取文件列表:

const  google  = require('googleapis');
const SCOPES = ['https://www.googleapis.com/auth/drive'];
const KETFILEPATH = "key.json"
const auth = new google.auth.GoogleAuth(
    keyFile: KETFILEPATH,
    scopes: SCOPES
)

let files_list = async (auth, nextPageToken = null, res = []) => 
    const driveService = google.drive( version: 'v3', auth )
    const list = await driveService.files.list(
        pageToken: nextPageToken,
        fields: 'nextPageToken, files(id, name)',
      );
      const files = list.data.files;
      if (files.length === 0) 
        console.log('No files found.');
       else 
        for (const file of files) 
            res.push(file)
        
        if (list.data.nextPageToken) 
            return await files_list(auth, list.data.nextPageToken, res)
         else 
            return res
        
      

但是这个函数返回给我很多文件,我已经从https://drive.google.com/ 网站上删除了。我也有空垃圾。更重要的是,当我尝试使用此功能删除这些文件时:

const  google  = require('googleapis');
const SCOPES = ['https://www.googleapis.com/auth/drive'];
const KETFILEPATH = "key.json"
const auth = new google.auth.GoogleAuth(
    keyFile: KETFILEPATH,
    scopes: SCOPES
)

let deleteFile = async (auth, file_id) => 
    const driveService = google.drive( version: 'v3', auth )
    let res = await driveService.files.delete( 'fileId': file_id )
    if (res.status != 200) 
        console.log(res)
        console.log("Error deleting file")
    

我得到这个输出:


  config: 
    url: 'https://www.googleapis.com/drive/v3/files/1Iddlq9Mri76rLhDi3TGCTYM-HEhVtEKL',
    method: 'DELETE',
    userAgentDirectives: [ [Object] ],
    paramsSerializer: [Function (anonymous)],
    headers: 
      'x-goog-api-client': 'gdcl/5.0.2 gl-node/16.3.0 auth/7.2.0',
      'Accept-Encoding': 'gzip',
      'User-Agent': 'google-api-nodejs-client/5.0.2 (gzip)',
      Authorization: '...',
      Accept: 'application/json'
    ,
    params: ,
    validateStatus: [Function (anonymous)],
    retry: true,
    responseType: 'json'
  ,
  data: '',
  headers: 
    'alt-svc': 'h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-T051=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"',
    'cache-control': 'no-cache, no-store, max-age=0, must-revalidate',
    connection: 'close',
    date: 'Wed, 07 Jul 2021 14:35:10 GMT',
    expires: 'Mon, 01 Jan 1990 00:00:00 GMT',
    pragma: 'no-cache',
    server: 'GSE',
    vary: 'Origin, X-Origin'
  ,
  status: 204,
  statusText: 'No Content',
  request: 
    responseURL: 'https://www.googleapis.com/drive/v3/files/1Iddlq9Mri76rLhDi3TGCTYM-HEhVtEKL'
  


我使用服务帐户进行身份验证。我已经和这个账号共享了一个文件夹,他需要处理。

我该如何处理?如何获取存储在 Google Drive 中的真实文件列表?

【问题讨论】:

【参考方案1】:

您已与服务帐户共享一个文件夹。但是您正在请求服务帐户有权访问的所有文件。

 const driveService = google.drive( version: 'v3', auth )
    const list = await driveService.files.list(
        pageToken: nextPageToken,
        fields: 'nextPageToken, files(id, name)',
      );

您尚未添加父母,因此您不会只查看请求所有文件的单个文件夹。您是否认为您看到的文件是服务帐户 google drive 帐户上的文件?

const driveService = google.drive( version: 'v3', auth )
    const list = await driveService.files.list(
        pageToken: nextPageToken,
        q: `'$FolderId' in parents`
        fields: 'nextPageToken, files(id, name)',
      );

【讨论】:

【参考方案2】:

您必须使用以下内容

 let result = await drive.files.list(
    q: "mimeType='application/vnd.google-apps.folder' and trashed=false",
    fields: 'nextPageToken, files(id, name)',
    spaces: 'drive',
);

在这个thrashed=false 中不会检查Thrash 中的文件。万事如意

【讨论】:

【参考方案3】:

你需要使用 includeRemoved: false

const driveService = google.drive( version: 'v3', auth )
const list = await driveService.files.list(
    pageToken: nextPageToken,
    includeRemoved: false,
    q: `'$FolderId' in parents`
    fields: 'nextPageToken, files(id, name)',
  );

【讨论】:

以上是关于Node JS Google Drive api方法列表返回已删除文件的主要内容,如果未能解决你的问题,请参考以下文章

Google Drive API失败,因为库的google.drive功能不存在

Google Drive Node.js - 从节点v7更新到v9后上传文件时出错

Google Drive API,无法通过 JS 打开标准共享对话框(x-frame-options 错误)

Javascript - Google Drive v3 API和功能

Drive Builder错误:API Google Drive Spring Boot

通过 Google Drive API 从本地 CSV 文件创建 Google Drive 电子表格