Express / Sharp создает на сервере изображения размером 0 КБ, а на локальном хосте работает - PullRequest
0 голосов
/ 15 апреля 2020

Я создаю сайт, используя ExpressJs. Для обработки загруженных фотографий пользователями я использую библиотеку Sharp (от Lovell). Что я делаю:

  1. загрузка фотографии
  2. изменение размера до нескольких предварительно заданных размеров
  3. сохранение измененных размеров изображений как новых изображений
  4. удаление оригинала ( загружено пользователем) фотография с сервера.

На локальном хосте Windows с приложением Node App на WSL: Ubuntu-18.04 все работает как положено.

На реальном сервере это Вот что происходит:

  1. загрузить фотографию -> ОК!
  2. изменить размер на несколько предопределенных размеров -> СБОЙ?
  3. сохранить изображения с измененным размером как новые изображения -> Новые фотографии сохраняются, но все с размером = 0 КБ
  4. удаляют исходную (загруженную пользователем) фотографию с сервера. -> 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

...