Я создаю сайт, используя ExpressJs. Для обработки загруженных фотографий пользователями я использую библиотеку Sharp (от Lovell). Что я делаю:
- загрузка фотографии
- изменение размера до нескольких предварительно заданных размеров
- сохранение измененных размеров изображений как новых изображений
- удаление оригинала ( загружено пользователем) фотография с сервера.
На локальном хосте Windows с приложением Node App на WSL: Ubuntu-18.04 все работает как положено.
На реальном сервере это Вот что происходит:
- загрузить фотографию -> ОК!
- изменить размер на несколько предопределенных размеров -> СБОЙ?
- сохранить изображения с измененным размером как новые изображения -> Новые фотографии сохраняются, но все с размером = 0 КБ
- удаляют исходную (загруженную пользователем) фотографию с сервера. -> FAIL
Вот мой код:
Для загрузки фотографии на сервер я использую промежуточное программное обеспечение Multer
// routes.js
var multer = require('multer');
var upload = multer({dest:'public/images/users'});
router.post('/images/upload_post', upload.single('imagename'), controllers.images.upload_post)
// controllers/images.js
var fs = require('fs')
const sharp = require('sharp')
upload_post : async function(req, res, next){
let dest = req.file.destination+'/'
let temp = req.file.filename
let name = req.body.imagename
let ext = '.jpg'
let sizes = ['200x200', '100x100', '50x50']
let count = 0
sizes.forEach(size =>{
sharp(dest+temp)
.resize(parseInt(size.split('x')[0]), parseInt(size.split('x')[1]))
.toFile(dest+name+'_'+size+ext)
.then( data => {
count += 1
if (count == sizes.length){
fs.unlink(dest+temp, (err)=>{
if (err) final += err
})
}
})
.catch(err => {final+=err});
})
return res.send("OK")
Затем я ввел сервер, использующий s sh и запустивший узел вручную:
$ node
> sharp('demo').resize(100,100).toFile('demo_100.jpg', (err, info) => {console.log(err); console.log(info) })
это привело к созданию файла demo_100.jpg размером 4 КБ, изображение правильное.
В заключение, я временно изменил права целевого каталога public/images/users
на 777 вместо 755, но проблема сохраняется.
Есть какие-либо подсказки, что может быть не так? (Помните, что приложение правильно работает на локальном хосте)
На локальном хосте я запускаю приложение, используя nodemon app.js
На сервере приложение работает CLOUDLINUX PASSENGER CONFIGURATION