Nodejs:迭代req.files属性

时间:2012-10-25 22:08:30

标签: node.js

我对nodejs很新,有时候遇到困难:) 所以举个例子。我正在通过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(文件在reg.files)来获取它(forEach不起作用 - 不知道为什么。似乎是一个普通的哈希/对象)。 但现在我的问题真的开始了。如何读出该文件的属性?例如。 file.path不起作用。它返回“未定义”,但为什么?

有人可以给我一些提示来理解这些基础知识吗?

2 个答案:

答案 0 :(得分:6)

我相信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()

希望有所帮助!

答案 1 :(得分:0)

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

如果只有(一个)文件,则:

如果上载多个文件,

forEach()可以解决问题 像这样:

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

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

我们可以循环获取iq> = q文件的长度