#javascript #node.js #linux #node-modules #unzip
Вопрос:
В данный момент у меня есть скрипт, который загружает zip-файл из постоянной ссылки, разархивирует его, удаляет старую версию файла, а затем переименовывает недавно разархивированный каталог.
exec("unzip recentDatabase.zip", (error, stdout, stderr) => {
if(error){
...
}
if (stderr) {
...
}
...
exec("rm -r recentDatabase ; mv " DBname " recentDatabase");
})
по какой-то причине я получаю сообщение об ошибке : «Подпись конца центрального каталога не найдена. Либо этот файл не
является zip-файлом, либо он представляет собой один диск из нескольких частей архива. В
последнем случае центральный каталог и комментарий к zip-файлу будут найдены на
последнем диске(дисках) этого архива.»
Я сделал с помощью этого оператора обратного вызова, чтобы убедиться, что эта команда распаковки запускается только тогда, когда она подтверждает, что загрузка http завершена, и когда я запускаю «распаковать recentDatabase.zip» в терминале он работает отлично, проблемы возникают только тогда, когда я вызываю его из дочернего процесса.
Есть ли что-то, что я делаю не так?
Комментарии:
1. Вы пробовали использовать полный путь к файлу?
exec("unzip /where/it/lives/in/the/filesystem/recentDatabase.zip", (error, stdout, stderr) => {
?2. да, я сделал это, также я думаю, что исправил проблему, обратные вызовы, похоже, не работают с загрузками, он вызывает обратный вызов, как только правильно начинает загрузку, но ничто не уведомляет скрипт о том, что загрузка завершена, я добавил функцию тайм-аута, чтобы убедиться, что загрузка правильно просыпается
3. Приятно слышать; вместо потенциально ненадежного таймера вы рассматривали возможность использования чего-то вроде inotify ? У меня нет node.js опыта, но широко использовали события inotify с других языков.