2016-01-11 3 views
5

Я пытаюсь создать папку, используя модуль узла mkdirp. но он создается с разрешением 0775, но мне нужно создать с разрешением 0777. официальная документация говорит, что она по умолчанию равна 0777, но в моем случае это 0755. Может ли кто-нибудь мне помочь? код:создать каталог с разрешением в узле js

var new_location = 'public/images/u/7/'; 
mkdirp(new_location, function(err) { 
    if (err) { 
    } else { 
    } 
}); 
+0

не работает, проверен mkdirp (new_location, {mode: "777"}, function (err) {}); – iam

ответ

9

Документация, говорится, что по умолчанию 0777 & (~process.umask()), что означает, что ваше значение Umask является "вычитается" из 0777 Так как umask обычно составляет 002 или 022, вы попадаете в 0775 или 0755.

Однако, даже если вы поставляете 0777 до mkdirp(), базовый системный вызов по-прежнему будет применять значение umask. Чтобы предотвратить это, необходимо очистить биты полномочий, создать каталог, используя разрешение вы хотите, и (необязательно) восстановить биты полномочий к предыдущему значению:

var oldmask = process.umask(0); 
mkdirp(new_location, '0777', function(err) { 
    process.umask(oldmask); 
    if (err) ... 
    ... 
}); 

В качестве альтернативы, вы можете использовать fs.chmod(), чтобы установить правильные разрешения после создания каталога.

+0

Спасибо за предоставленную мне полезную информацию. – iam

+0

mkdirp не создает рекурсивно каталог. , если мое местоположение: 'public/images/p /' + place_id + '/ ls /'; и только у меня есть до/р/папка. в моем случае он генерирует до place_id. Можете ли вы мне помочь? – iam

+0

@iam создайте новый вопрос для этого – robertklep

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