首页 > 解决方案 > 如何在使用 Google Drive API v3 移动文件之前检查文件是否已完成上传?

问题描述

我正在编写一个小型归档脚本(在 node.js 中),以将我的 Google Drive 上的文件移动到预定文件夹(如果它们包含.archive.7z在文件名中)。该脚本作为 cron 作业定期运行,文件移动没有引起任何问题,但仍在由我的桌面客户端上传过程中的文件在完成之前被移动。这会终止上传并导致目标文件夹中的文件损坏。

仍然从我的桌面上传到 Google Drive 的文件仍然由以下函数返回:

async function getArchivedFiles (drive) {
  const res = await drive.files.list({
    q: "name contains '.archive.7z'",
    fields: 'files(id, name, parents)',
  })

  return res.data.files
}

使用以下代码移动和重命名文件后,上传将从我的客户端(Insync)终止,并且目标文件被破坏。

drive.files.update({
  fileId: file.id,
  addParents: folderId,
  removeParents: previousParents,
  fields: 'id, parents',
  requestBody: {
    name: renameFile(file.name)
  }
})

有没有办法在移动文件之前检查文件是否仍在上传?

标签: node.jsgoogle-drive-apigoogle-api-nodejs-client

解决方案


事实证明,上传时正在创建一个小的占位符类型文件。我不确定这是 Google Drive API 行为还是 Insync 桌面客户端独有的行为。该文件似乎是单独上传的,因此可以在完成后自由重命名。

我通过在文件名中包含文件的 md5 哈希来解决这个问题,并更新我的脚本以仅在文件名中的哈希与md5Checksum从 Google Drive API 检索到的匹配时移动文件。


推荐阅读