2015-01-29 4 views
0

Я пытаюсь загрузить файл в мое приложение node/express, но каждый раз, когда я получаю ошибку ENOENT при переименовании файла. Мой код:Err. ENOENT при переименовании файла в node.js

var tmp_path = req.files.file.path; 
fs.rename(tmp_path, target_path, function (err) { 
    if(err) throw err; 
    ... 
    }); 

где target_path - путь назначения. Если я:

console.log('exists ' + fs.existsSync(tmp_path)); 

тогда мой сервер журналы:

exists true 

Кроме того, список содержимого каталога TMP показывает, что файл существует. В чем проблема?

+0

Что такое target_path? Помните, что fs не будет создавать отсутствующие каталоги для вас - вам нужно будет явно создать их, если они не будут найдены. – Semicolon

+0

Да, это была проблема. – Allonsy

+0

Прохладный. Я добавлю формальный ответ, если вам нравится, поскольку я помню, что такое поведение удивляло меня в первый раз, когда я столкнулся с ним. – Semicolon

ответ

1

Методы FS, такие как fs.rename, которые создают, перемещают или переименовывают файлы, ожидают, что любые каталоги на пути уже существуют. Когда они этого не сделают, вы получите ENOENT. Поскольку очень часто вы подразумеваете «сделать этот файл - и любые каталоги в указанном мной пути», вы можете захотеть использовать библиотеку NPM, которая абстрагирует доступ к fs с помощью методов, которые занимаются такими вещами.

Существует немало вариантов. Например, fs-extra является одной из лучших библиотек. Используя fs-extra, вы можете использовать ensureDir в этой операции, чтобы сначала создать структуру каталогов, если она еще не существует.

Смежные вопросы