我在这里想念什么?节点,Express,req.files ['image0']

时间:2018-12-29 01:16:42

标签: node.js mongodb express

我正在尝试将数据从req.files数组中提取出来,但是点表示法不起作用,我也不知道自己缺少什么。

我的哈巴狗设置:

if product.image
   .col-lg-1.pull-left
       img.product-img(src='/images/' + product.image, alt=product.title)
   .col-lg-11.pull-right
       input(type="hidden", name="mainImg", value=product.image)
       input.form-control(type="file", name="image0", id="image0")
   .clear
else
    .col-lg-11.pull-right
        input.form-control(type="file", name="image0", id="image0" value="")

这将按预期返回req.files数组:

console.log(req.files)

结果:

{ image0:
   [ { fieldname: 'image0',
   originalname:'Some_image.jpg',
   encoding: '7bit',
   mimetype: 'image/jpeg',
   destination: 'images',
   filename: 'bdad727257698479d84157ad0211b05f.jpg',
   path: 'images\\bdad727257698479d84157ad0211b05f.jpg',
   size: 109205 } ],
  image1:
   [ { fieldname: 'image1',
   originalname:'Some_image.jpg',
   encoding: '7bit',
   mimetype: 'image/jpeg',
   destination: 'images',
   filename: '9546c3810ad9d6c471fde641a30078fd.jpg',
   path: 'images\\9546c3810ad9d6c471fde641a30078fd.jpg',
   size: 109205 } ],
  image2:
   [ { fieldname: 'image2',
   originalname:'Some_image.jpg',
   encoding: '7bit',
   mimetype: 'image/jpeg',
   destination: 'images',
   filename: '0bd6d9da3b53348f5b9145723d4da340.jpg',
   path: 'images\\0bd6d9da3b53348f5b9145723d4da340.jpg',
   size: 78420 } ]
 } '#################'

这将按预期返回第一个数组元素:

console.log(req.files['image0'], '#################')

结果:

[ { fieldname: 'image0',
originalname: 'Some_Image_Name.jpg',
encoding: '7bit',
mimetype: 'image/jpeg',
destination: 'images',
filename: '28efd1e7544820acc0ac174ac8404ea9.jpg',
path: 'images\\28efd1e7544820acc0ac174ac8404ea9.jpg',
size: 109205 } ] '#################'

这返回未定义,我不明白为什么:

console.log(req.files['image0'].fieldname)

这是我的multer设置:

const upload = multer({dest: 'images', storage: imgStorage, fileFilter: fileFilter });
// app.use(upload.array('image'));

app.use(upload.fields([
    {
          name: 'image0', maxCount: 1
    },
    {
          name: 'image1', maxCount: 1
    },
    {
          name: 'image2', maxCount: 1
    },
    {
          name: 'image3', maxCount: 1
    }
])

我最终想建立一个循环来遍历20张或更多张图片,但是我想先尝试获取数据,然后再尝试处理这样的循环。该项目用于多图像上载,如果没有传递图像数据,并且如果仅传递指定的图像,则图像不会被覆盖。这就是为什么我使用upload.fields而不是.any()或array()的原因。

任何帮助或建议,将不胜感激。

1 个答案:

答案 0 :(得分:0)

您正在尝试访问数组的属性,就好像它是一个对象一样。这是无效的Javascript。

尝试:req.files['image0'][0].fieldname

req.files['image0']返回:

[ { fieldname: 'image0',
originalname: 'Some_Image_Name.jpg',
encoding: '7bit',
mimetype: 'image/jpeg',
destination: 'images',
filename: '28efd1e7544820acc0ac174ac8404ea9.jpg',
path: 'images\\28efd1e7544820acc0ac174ac8404ea9.jpg',
size: 109205 } ]

这是一个数组。

req.files['image0'][0]返回:

{ fieldname: 'image0',
originalname: 'Some_Image_Name.jpg',
encoding: '7bit',
mimetype: 'image/jpeg',
destination: 'images',
filename: '28efd1e7544820acc0ac174ac8404ea9.jpg',
path: 'images\\28efd1e7544820acc0ac174ac8404ea9.jpg',
size: 109205 }

这是一个对象。

您可以从该对象访问属性fieldname