【发布时间】:2020-09-01 10:42:09
【问题描述】:
我完成了我的(第一个和真实的)nodejs、express、handlebars 项目。 现在,我可以在“真实”服务器上看到应用程序,也可以看到实际问题。
应用程序非常简单:用户可以发布添加(如 craiglist)。
我在公共/上传中使用 multer 存储图像,只有一个要求:只是为了能够上传图像(png、jpeg)。
问题来了,因为人们可以为服务器上传非常重的图像。 我正在寻找一些解决方案,但就我的实际知识而言,一切看起来都非常复杂。 所以,第一个问题:
你会走哪条路?
- 保存图片,然后在服务器端压缩
或
- 在通过 multer 存储之前,调整大小并转换为更轻的文件 (欢迎提供更多想法)
我看到了许多模块,如锐化、浏览器图像压缩等,但正如我所说,这超出了我的实际理解。
有什么更简单的方法可以达到我的目标吗?
更新:
这是我的路线文件:
const express = require('express');
const router = express.Router();
const adsController = require('../controllers/ads.controller');
var multer = require('multer')
var upload = multer({ dest: 'public/uploads', limits: { fileSize: 3000000 } });
const secure = require('../middleware/secure.mid');
...
router.post('/publicar-anuncio/:categoryId', upload.array('image'), adsController.doPost)
更新 2:
// controller
const {name, title, description, email } = req.body;
const imageUpload = [];
console.log(req.files)
req.files.map(eachPath => imageUpload.push(`uploads/${eachPath.filename}`))
const newMiscAd = new Misc ({name,title,description,email,image:{imgPath:imageUpload} })
....
User.findOne({email:email})
.then(user => {
if(user !== null){
console.log(`User ${user.email} already exists`)
newMiscAd.save()
.then(ad => {
User.updateOne({email:ad.email},{$push:{misc:ad._id}})
.then(() => {
createAdEmail({newAdEmail});
res.render('ads/adSuccess')
})
})
.catch(error => {
if (error instanceof mongoose.Error.ValidationError) {
console.log(error)
renderWithErrors(error.errors)
} else {
console.log('issue #userExist')
next(error)
}
})
} else {
//new user through posting
console.log(`User ${email} is new user MISC`)
newMiscAd.save()
.then(newAdData => {
createAdEmail({newAdEmail});
res.render('users/postSignup',{email:newAdData.email,id:newAdData._id,categoryAd:newAdData.category})
})
.catch(error => {
// whatever
}
【问题讨论】: