Убедитесь, что у вас установлена последняя версия npm.
npm install npm@latest -g
Если это все еще не работает, вы можете попробовать удалить node_modules и запустить npm install снова
rm -Rf node_modules
npm install
Tha самый безопасный путь должен загрузить файл на другое местоположение и затем переместить его в целевую папку.
Другое изменение, упомянутое Мороженым, должно изменить имя файла на некоторое другое расширение после загрузки и искать только файлы с тем расширением.
Вы могли попробовать разные вещи:
Я только считал файл, который не находится в режиме записи. Это является самым безопасным, поскольку это означает, что никакой другой процесс не пишет в этом файле. Можно проверить, не находится ли файл в режиме записи при помощи canWrite метода класса Файла.
Это решение хорошо работает для меня, поскольку у меня также есть тот же самый сценарий Вы направление.
Если Вы имеете некоторый контроль на процессе, который делает FTP, у Вас мог потенциально быть он, создают "файл флага" в исходном каталоге сразу ПОСЛЕ ТОГО, КАК ftp для большого файла закончен.
Затем Ваш поток Java должен проверить присутствие этого файла флага, если это присутствует затем существует файл, готовый быть обработанным в исходном каталоге. Прежде, чем обработать большой файл, поток должен удалить файл флага.
Файл флага может быть чем-либо (даже пустой файл).
Принятие Вас не имеет никакого контроля над процессом FTP...
Позвольте ему быть похожим на это. Когда Вы получите исключение, затем попытайтесь обработать его снова в следующий раз. Повторите его, пока файл не будет обработан. Его польза для хранения немногих атрибутов в случае исключения для проверки его позже, как; имя, измененное в последний раз, размер.
Проверьте точное исключение прежде, чем решить обработать его позже, исключение могло бы произойти по некоторой другой причине.
Если Вашей ОС является Linux и Ваше ядро> 2.6.13, Вы могли бы использовать уведомление о событии файловой системы API, названный inotify. Здесь существует реализация Java: https://bitbucket.org/nbargnesi/inotify-java.
Вот пример кода (в большой степени вдохновлен веб-сайтом).
try {
Inotify i = new Inotify();
InotifyEventListener e = new InotifyEventListener() {
@Override
public void filesystemEventOccurred(InotifyEvent e) {
System.out.println("inotify event occurred!");
}
@Override
public void queueFull(EventQueueFull e) {
System.out.println("inotify event queue: " + e.getSource() +
" is full!");
}
};
i.addInotifyEventListener(e);
i.addWatch(System.getProperty("user.home"), Constants.IN_CLOSE_WRITE);
} catch (UnsatisfiedLinkError e) {
System.err.println("unsatisfied link error");
} catch (UserLimitException e) {
System.err.println("user limit exception");
} catch (SystemLimitException e) {
System.err.println("system limit exception");
} catch (InsufficientKernelMemoryException e) {
System.err.println("insufficient kernel memory exception");
}