Node.js. Загрузка файлов на сервер. Что делать со старыми несохраненными файлами?
Приветствую.
Сервер на Node.js. Используется Express 4.0
Есть страничка, на ней форма, через которую грузятся файлы. После загрузки файлы помещаются во временную папку temp (для каждого пользователя отдельная папка temp) . Есть пользователь нажмет кнопку Сохранить, файлы будут перемещены в папку пользователя.
Вопрос: если пользователь загрузил файлы, но не нажал Сохранить, a просто ушел со страницы. Что делать с этими загруженными файлами в папке temp? Как отследить такие файлы и удалить?
Определиться со временем, по истечении которого файлы должны удаляться. Периодически скриптом вычищать устаревшие файлы. Чтобы не гонять по огромному дереву каталогов, можно при загрузке файла делать запись о пути к нему и времени загрузки в БД. Соответственно, из БД и брать список удаляемых файлов (выборка по времени создания/истечения срока). Ну и не забывать удалять записи из БД в процессе обхода ее скриптом и при нажатии пользователем кнопки «Сохранить», то есть вместе с удалением файла из каталога.
А не получите таким образом состояние гонки? Это не самое лучше решение. Вы будете сталкиваться с ситуацией, когда пользователь будет пытаться сохранить файл, которого на сервере уже нет. Цикл такой: файл загружен -> крон вычистил временные файлы -> пользователь нажал сохранить и получил ошибку что файла нет, в то время как он может наблюдать состояние успешной загрузки на своем экране.
Ренат Абдусаламов: файл будет залочен процессом node.js и крон в это время не сможет его удалить, не так ли? Не говоря уж о том, что приведенную мной команду можно исправить так, чтобы она удаляла файлы только старше определенного возраста.
Константин Китманов: Не так. Вы невнимательно прочитали вопрос топикстартера. У него процесс загрузки файла разделен на 2 шага: загрузка файла в /temp/ и последующее сохранение (пользователь жмет "Сохранить"). Когда файл полностью загрузился на сервер, он не будет залоченным. Сохранение файла в его сценарии просто мувит его в директорию постоянного хранения. Поэтому после загрузки в /temp/ файл успешно может быть удален по крону. Когда пользователь созреет, нужного файла для перемещения может попросту не оказаться.
> Не говоря уж о том, что приведенную мной команду можно исправить так, чтобы она удаляла файлы только старше определенного возраста.