使用PM2运行应用程序时,夏普图像上传器无法正常工作

时间:2016-04-27 17:11:15

标签: express npm multer

我有一个快速的应用程序,我使用夏普在用户上传后调整图像大小。当我使用'npm start'启动应用程序时,我可以上传图像而没有任何问题,但如果我使用PM2来管理过程,则图像不会保存在服务器上。我可以保存它们而不使用Sharp调整它们的大小,只有当我拥有锐利的代码时才能保存它们。以下是我的控制器的代码。 Multer正在处理表格,锐利正在调整图像大小。

doNewRecipe: function(req, res) {
    for (var key in req.body) {
        req.body[key] = req.body[key] || undefined;
    }
    var body = _.pick(req.body, 'title', 'description', 'ingredients', 'instructions', 'yield', 'prep_time', 'cook_time', 'categoryId');
    body.userId = req.session.user.id;

    if (req.file) {
        var tempPath = req.file.path,
            ext = path.extname(req.file.originalname).toLowerCase(),
            //targetPath = path.resolve(finalUploadPath + req.file.filename + ext);
            targetPath = path.resolve(finalUploadPath);
        fs.renameSync(tempPath, tempPath + ext);
        var newFileName = req.file.filename + ext;
        var imageFile = tempPath + ext;


        body.image = newFileName;

        sharp(imageFile)
            .resize(450, 450)
            .max()
            .toFile('./public/finalUpload/' + newFileName, function(err, info) {
                body.image = newFileName;
                fs.unlinkSync(path.resolve(tempPath + ext));

                db.recipe.create(body).then(function(recipe) {
                    res.redirect('/recipe/view/' + recipe.id);
                }, function(e) {
                    console.log(e.message);
                    res.render('error', {message: e.toString()});
                });
            });


        //fs.renameSync(tempPath, targetPath);
    } else {

        db.recipe.create(body).then(function(recipe) {
            res.redirect('/recipe/view/' + recipe.id);
        }, function(e) {
            console.log(e.message);
            res.render('error', {message: e.toString()});
        });
    }
},

1 个答案:

答案 0 :(得分:0)

如果您使用路径来确定保存文件的位置,它将轻松地从一个系统传输到另一个系统。我实际上创建了一些变量来确定保存文件的位置。以下是我的代码。

if (process.env.NODE_ENV === 'production') {
   var finalUploadPath = 'hidden';
   var googleTracking = true;
} else if (process.env.NODE_ENV === 'staging') {
   var finalUploadPath = 'hidden';
   var googleTracking = false;
} else {
   var finalUploadPath = 'hidden';
   var googleTracking = false;
}

sharp(imageFile)
            .resize(450, 450)
            .max()
            .toFile(finalUploadPath + req.file.filename + '.jpg', function(err, info) {
                body.image = req.file.filename + '.jpg';
                fs.unlinkSync(path.resolve(tempPath + ext));

                compressAndResize(path.resolve(__dirname, '../public/finalUpload/' + body.image));

                db.recipe.create(body).then(function(recipe) {
                    req.flash('success', 'Recipe created');
                    res.redirect('/recipe/view/' + recipe.id + '/' + recipe.slug);
                }, function(e) {
                    console.log(e.message);
                    req.flash('error', 'Error creating new recipe');
                    res.render('error', {message: e.toString(), csrfToken: req.csrfToken(), google: googleTracking});
                });
            });