На VPS сервере на linux не работает mkdir
Всем привет, у меня есть бекенд на node js, который задеплоил на VPS сервер с ISP менеджером 6. Бэк работает штатно кроме одной функции. Когда я отправляю base64 представления фотографий на него - он не сохраняет фотографии и не дает создать папку для этих фотографий.
Код фронта:
const onSubmit = async (data) => {
if (text !== "") {
const formData = new FormData();
// получаем загруженные файлы
const files = inputFileRef.current.files;
//добавляем их в formData
for (let key of Object.keys(files)) {
const newFile = new File([files[key]], translate(files[key].name));
formData.append('postImage', newFile)
}
// загружаем фотографии на бэк
const answer = await axios.post(`/image/${data.name}`, formData)
console.log(answer)
} else {
alert("Введите описание проекта");
}
}
Код бэкенда:
const storage = multer.diskStorage({
destination: (req, file, cb) => {
const title = req.params.title; // получаем айди из параметров роута
const path = `./uploads/projects/${title}`
fs.mkdirSync(path, { recursive: true })
return cb(null, path)
},
filename: (_, file, cb) => {
cb(null, file.originalname); // нет ошибок и говорит, какое имя дать файлу
},
})
export const postImages = async (req, res) => {
try {
let upload = multer({ storage: storage, fileFilter: imageFilter }).any('postImage');
upload(req, res, function(err) {
if (req.fileValidationError) {
return res.send(req.fileValidationError);
}
else if (err instanceof multer.MulterError) {
return res.send(err);
}
else if (err) {
return res.send(err);
}
// Display uploaded image for user validation
res.send(`You have uploaded this images`);
});
} catch (err) {
console.log(err)
res.status(500).json({
message:'Не удалось загрузить фотографию'
})
}
}```
Ошибка на стороне задеплоенного бэка:
node:internal/fs/utils:348
throw err;
^
Error: EACCES: permission denied, mkdir './uploads/projects/Марьина
роща'
at Module.mkdirSync (node:fs:1395:3)
at DiskStorage.destination [as getDestination] (file:///var/www
/www-root/data/www/api.riku-remont.ru/controllers/ImageController.j
s:51:12)
at DiskStorage._handleFile (/var/www/www-root/data/www/api.riku
-remont.ru/node_modules/multer/storage/disk.js:31:8)
at /var/www/www-root/data/www/api.riku-remont.ru/node_modules/m
ulter/lib/make-middleware.js:137:17
at imageFilter (file:///var/www/www-root/data/www/api.riku-remo
nt.ru/validations/validations.js:23:5)
at Multipart.<anonymous> (/var/www/www-root/data/www/api.riku-r
emont.ru/node_modules/multer/lib/make-middleware.js:107:7)
at Multipart.emit (node:events:513:28)
at HeaderParser.cb (/var/www/www-root/data/www/api.riku-remont.
ru/node_modules/busboy/lib/types/multipart.js:358:14)
at HeaderParser.push (/var/www/www-root/data/www/api.riku-remon
t.ru/node_modules/busboy/lib/types/multipart.js:162:20)
at SBMH.ssCb [as _cb] (/var/www/www-root/data/www/api.riku-remo
nt.ru/node_modules/busboy/lib/types/multipart.js:394:37) {
errno: -13,
syscall: 'mkdir',
code: 'EACCES',
path: './uploads/projects/Марьина роща'
}
При отправке фотографий на локальный бэк - все работает штатно.