#node.js #express #multer
Вопрос:
Я реализовал Multer, чтобы разрешить загрузку изображений на сервер node.js/express.
Это хорошо работает в 80% случаев, но для некоторых файлов он загружает 20%, не возвращая никаких ошибок. (Я вроде как новичок в разработке, поэтому не уверен, правильно ли я настроил свою «обработку ошибок»)
Я попытался изменить расширение/ размер файла, но, похоже, ничего не работает : кажется, что это совершенно случайно.
Если у вас есть какие-либо идеи о том, как начать устранять проблему, это было бы здорово!
На стороне сервера :
//define Path and FileName
imgPath = "views/zettls/" req.user._id.toString()
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, imgPath)
},
filename: function (req, file, cb) {
cb(null, Date.now() path.extname(file.originalname)) //Appending extension
}})
//define upload rule
const upload = multer({
storage: storage,
limits: {
fileSize: 10000000,
},
fileFilter(req, file, cb) {
if (!file.originalname.match(/.(png|jpg|jpeg|gif|PNG|JPG|JPEG|GIF)$/)){
cb(new Error('Please upload an image.'))
}
cb(undefined, true)
}
})
//upload img
upload.single('img')(req, {},async function (err) {
req.body.zetKind = "img"
req.body.zetBody ="img"
req.params.type="upload"
req.body.status = req.params.status
//create Zettl
const doCreateZettl = require('./controllers/doCreateZettl.js')
response = await doCreateZettl.create(fs,path,ObjectId,req,res)
if (err) throw err
})
//mistake in how error is send back --> need to check
try {
const incident = await Incident.findById(req.body.id)
incident.image = req.file.buffer
incident.save()
res.send()
} catch (e){res.redirect('/profile/none')} (error, req, res, next) => {
res.status(400).send({error: error.message})
}
Сторона клиента :
<form id="uploadForm" style="height:100%" action="/createImgZettl" method="post" enctype="multipart/form-data">
<div><input type="text" id="zetTitle" name="title" value="Title" onclick="if(this.value=='Title'){this.value=''}"/></div>
<div><textarea rows = "10" cols = "100" id="zetDesc" name="description" value="Description" onclick="if(this.value=='Description'){this.value=''}"/></textarea></div>
<div id="tag" style="margin-bottom:1em;">
<input class='customLook' value='all,image' id="tagList" name="tags">
<button type="button"> </button>
</div>
<div>
<button class="defaultBTN-big" type="submit" value="upload" formaction="/createImgZettl/public"> Publish </button>
<button class="defaultBTN-big" type="submit" value="upload" formaction="/createImgZettl/private">Save </button>
</div>
</div>
</form>