4

我对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(file in reg.files) 来获取它(forEach 不起作用 - 不知道为什么。似乎是一个普通的哈希/对象)。但现在我的问题实际上开始了。如何读出该文件的属性?例如 file.path 不起作用。它返回“未定义”,但为什么呢?

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

4

2 回答 2

12

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

希望有帮助!

于 2012-10-25T22:23:55.767 回答
0

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

如果只有(曾经)一个文件,那么:

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

控制台.log(文件[0].name);

控制台.log(文件[0].size);

我们可以给你一个循环来获取 req 文件 i=0>=文件长度

于 2019-03-27T11:57:22.413 回答