node.js - 使用node.js引用多个文件上传到数据库

标签 node.js jquery-file-upload multer

我不明白如何使用 Node.Js 保存上传到数据库的多个文件的引用(文件名)。

我正在使用 blueimp jquery 文件上传和 multer 中间件将多个文件上传到本地存储(上传文件夹)。

<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

更多信息:目前,我正在使用 jquery 文件上传,当我上传 2 个图像时,它会发出 2 个发布请求。如果没有 jquery 文件上传,它会为所有上传的图像生成 1 个 post req,并且我得到 req.files 一个唯一的数组(包含所有上传的文件)。如何将该信息保存到 MongoDB?

recordModel.js

//...
  images: String,
//...

最佳答案

你的“images”属性看起来就像一个字符串值,所以如果你只是寻找一个逗号分隔的 URL 字符串,最简单的方法就是引入 Lodash 并创建字符串,如下所示:

record.images = _.map(req.files['images'], 'path').join(',');

也就是说,我认为实际上您不仅仅需要一个字符串,而是(我认为)您最好定义一个 ImageSchema,其中包含您从 req.files 获取的部分或全部信息。至少,我会提取路径和 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]
... 

希望有帮助。

关于node.js - 使用node.js引用多个文件上传到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38530345/

相关文章:

node.js - 使用 Node.js 列出 Google Cloud Storage 存储桶中的文件夹

drag-and-drop - 无法使用 Blueimp jQuery-File-Upload 拖放到 MS Edge 中

javascript - JQuery 文件上传未重置

AngularJs $scope.$apply 没有按预期工作

C++/Node.js :binding. gyp 库失败

node.js - 如何在 React Native 中导入 Node 模块

node.js - 如何使用express multer加密文件

node.js - 将大文件上传到 NodeJS 网络服务器

node.js - 无法上传多个文件

javascript - 找不到主模块中的 WEBPACK5 错误 : Error: Can't resolve './src'