Nodejs:遍历req.files属性

6

我对Node.js还比较新,有时遇到一些困难 :) 例如,我通过AJAX发送图像文件并在我的应用程序中成功接收。

console.log(req.files)打印:

{
    img_1351078491675: {
        size: 354683,
        path: '/tmp/f29009b6dc914c2ab27e2c5fde13e7d8.jpg',
        name: 'nov10wallpaper-1_1600.jpg',
        type: 'image/jpeg',
        hash: false,
        lastModifiedDate: Wed Oct 24 2012 13: 36: 55 GMT + 0200(CEST),
        _writeStream: {
            path: '/tmp/f29009b6dc914c2ab27e2c5fde13e7d8.jpg',
            fd: 14,
            writable: false,
            flags: 'w',
            encoding: 'binary',
            mode: 438,
            bytesWritten: 354683,
            busy: false,
            _queue: [],
            _open: [Function],
            drainable: true
        },
        length: [Getter],
        filename: [Getter],
        mime: [Getter]
    }
}

因为图片有一个时间戳,所以我无法通过req.files.img_访问它。因此,我使用for(file in reg.files)来获取它(forEach没有起作用-不知道为什么。似乎是一个普通的哈希/对象)。 但现在我的问题实际上开始了。如何读取该文件的属性?例如,file.path不起作用。它返回“未定义”,但为什么? 请问有人能给我一些提示,帮我理解这些基础知识吗?
2个回答

17

我认为forEach()是为数组设计的,而不是对象,所以这可能就是为什么它没起作用的原因。

如果只有一个文件,则:

var fileKey = Object.keys(req.files)[0];
var file = req.files[fileKey];

或者仅仅:

var file = req.files[Object.keys(req.files)[0]];`

...会“深入一层”,这样您就可以使用file.pathfile.type。如果有(或可能有)多个:

var files = [];
var fileKeys = Object.keys(req.files);

fileKeys.forEach(function(key) {
    files.push(req.files[key]);
});

这将给您一个文件列表,其中包含向下挖掘一级的文件,并且您可以使用 forEach()。希望这有所帮助!

最好使用let而不是var。 - sreejith v s

0

我相信forEach()是针对数组而不是对象的,所以这可能就是为什么它不起作用的原因。

如果只有(永远只有)一个文件,那么:

如果上传是多个文件,forEach()可以解决问题,就像这样:

console.log(files[0].name);

console.log(files[0].size);

我们可以使用循环来获取请求文件,即 i=0>=文件长度。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接