我对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不起作用。它返回“未定义”,但为什么?
有人可以给我一些提示来理解这些基础知识吗?
答案 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.path
或file.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文件的长度