Как проверить, что файл завершил загрузку, прежде чем перемещать его с помощью Google Drive API v3? - PullRequest
0 голосов
/ 27 апреля 2020

Я пишу небольшой скрипт архивации (в node.js), чтобы переместить файлы на моем Google Диске в заранее заданную папку, если они содержат .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
}

После того, как файлы перемещаются и переименовываются с использованием следующего кода, загрузка прекращается с моего клиента (Insyn c) и целевые файлы разрушаются.

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

Есть ли способ проверить, загружается ли файл по-прежнему перед тем как переместить?

1 Ответ

1 голос
/ 28 апреля 2020

Оказывается, при загрузке создается крошечный файл типа заполнителя. Я не уверен, является ли это поведением API Google Диска или чем-то уникальным для клиента Insyn c для настольных ПК. Этот файл, кажется, загружается отдельно и, таким образом, может быть свободно переименован, как только он будет завершен.

Я решил эту проблему, включив в имя файла файл md5 ha sh и обновив свой сценарий, чтобы перемещать файлы только при ha sh в названии файла соответствует md5Checksum, полученному из Google Drive API.

...