2016-04-27 51 views
1

我有一個快速應用程序,我正在使用Sharp在用戶上傳後調整圖像大小。當我使用'npm start'啓動應用程序時,我可以毫無問題地上傳圖像,但如果我使用PM2來管理該過程,則圖像不會保存在服務器上。我可以保存它們而不使用夏普來調整它們的大小,只有當我的代碼爲銳利時才能保存。以下是我的控制器的代碼。 Multer正在處理這個表格,並且正在調整圖片的大小。與PM2一起運行應用程序時,Sharp image uploader無法正常工作

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()}); 
     }); 
    } 
}, 
+0

您是否使用ecos.json配置文件來啓動您的應用程序與PM2?您可以添加CWD參數。 – Zauker

+0

我剛剛使用'pm2 start bin/www'來啓動應用程序。 –

+0

這是不一樣的執行 pm2開始/my/path/app.js 然後 cd/my/path; pm2 start app.js 你可以用你的應用程序的開始選項生成一個json文件,並添加'cwd'(工作目錄的路徑) – Zauker

回答

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}); 
       }); 
      }); 
相關問題