node.js - 如何在使用 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)
}
})
有没有办法在移动文件之前检查文件是否仍在上传?
解决方案
事实证明,上传时正在创建一个小的占位符类型文件。我不确定这是 Google Drive API 行为还是 Insync 桌面客户端独有的行为。该文件似乎是单独上传的,因此可以在完成后自由重命名。
我通过在文件名中包含文件的 md5 哈希来解决这个问题,并更新我的脚本以仅在文件名中的哈希与md5Checksum
从 Google Drive API 检索到的匹配时移动文件。
推荐阅读
- python - 我如何使用 Python 将 2 个 json 组合成 1 个
- twitter-bootstrap - 在 Bootstrap 4 中从底部向上滑动的模态
- php - 我正在处理 SQL 查询,但没有使用完整的外部联接
- javascript - ReactJS,event.currentTarget 与 Vanilla Javascript 的行为不同
- python - 创造石头,纸,剪刀游戏
- javascript - 在从 Firestore 加载用户类型之前呈现视图
- python - Kivy:如何创建一个动态工作的 RecycleView
- javascript - 如何在replace()中捕获变量字符串?
- python - 以编程方式所有 Ansible 任务属性
- c# - 卡夫卡消费者没有消费消息