使用node.js将多个文件引用到数据库
我不明白如何使用Node.Js保存多个file upload到数据库的引用(文件名)。
我正在使用blueimp jqueryfile upload和multer中间件来执行多个file upload到本地存储(上传文件夹)。
<input id="fileupload" type="file" name="images" data-url="/record/edit/#{record.id}" multiple>
app.js代码:
//using multer to upload files const upload_images = upload.fields([{ name: 'featured_img', maxCount: 1 }, { name: 'images', maxCount: 8 }]); //... app.post('/record/edit/:id', upload_images, recordController.postUpdate );
recordController.js代码:
exports.postUpdate = ((req, res, next) => { Record.findById(req.params.id, (err, record) => { if (req.files ) { console.log('UPLOADED') // record.featured_img = req.files['featured_img'][0].filename; //=> working for single file // Now, how to make it work for multiple files? console.log(req.files['images']) record.images = "HOW TO SAVE THE INFO OF REQ.FILES TO DB?"; }
console.log输出:
UPLOADED [ { fieldname: 'images', originalname: 'slippry-02.jpg', encoding: '7bit', mimetype: 'image/jpeg', destination: 'C:\\Users\\agaez\\Documents\\sanbox\\nodeApps\\theapp\\uploads', filename: '8mdnuacm1469201049450.jpg', path: 'C:\\Users\\agaez\\Documents\\sanbox\\nodeApps\\theapp\\uploads\\8mdnuacm1469201049450.jpg', size: 49798 } ] POST /record/edit/578580b43c7a08601730cc06 302 26.654 ms - 82 UPLOADED [ { fieldname: 'images', originalname: 'slippry-03.jpg', encoding: '7bit', mimetype: 'image/jpeg', destination: 'C:\\Users\\agaez\\Documents\\sanbox\\nodeApps\\theapp\\uploads', filename: 'yrnnzl9h1469201049467.jpg', path: 'C:\\Users\\agaez\\Documents\\sanbox\\nodeApps\\theapp\\uploads\\yrnnzl9h1469201049467.jpg', size: 49792 } ]
更新
我使用MongoDB作为数据库和mongoose作为ODM
更多信息: curirly,我正在使用jqueryfile upload,这是2上传2张图片时,请求。 如果没有jqueryfile upload,它会为所有上传的图片发送1个请求,我得到req.files一个唯一的数组(上传所有文件)。 如何将这些信息保存到MongoDB?
recordModel.js
//... images: String, //...
你的'图像'属性看起来就像一个单一的string值,所以如果你正在寻找一个逗号分隔的string的url,最简单的事情就是引入Lodash并创buildstring,如下所示:
record.images = _.map(req.files['images'], 'path').join(',');
也就是说,我认为实际上你不需要一个单一的string,相反,你会做得很好(我认为)来定义一个ImageSchema,它包含你从req.files
获得的一些或全部信息。 至less,我会拉path和mimeType,但其他信息可能对你有用,我不知道。 无论如何,鉴于你已经定义了一个ImageSchema,你可以这样做:
const Image = mongoose.model('Image'); /* your upload stuff happens, and then */ record.images = _.map(req.files['images'], function(i){ return new Image(i);});
这当然假设你将你的RecordSchema更新为:
... images : [ImageSchema] ...
希望有所帮助。