multer nodejs模块onFileUploadStart file.size返回0

我正在创build一个应用程序,它接收来自node.js中几个客户端的文件。 为此,我使用快递multer节点模块。

在下面的代码中,我处理file upload:

app.use(multer({ dest: './uploads/', rename: function (fieldname, filename){ return filename; }, onFileUploadStart: function(file){ console.log("file size: " + file.size); console.log(file.originalname + ' is starting...'); }, onFileUploadComplete: function(file){ console.log(file.fieldname + ' uploaded to ' + file.path); done = true; }, onFileUploadData: function(file, data){ //console.log("data being received " + data); } })); 

但是当我在onFileUploadStart里面input时, file.size是0。

一个multer文件对象是具有以下属性的JSON对象,所以我知道size属性存在。

 fieldname - Field name specified in the form originalname - Name of the file on the user's computer name - Renamed file name encoding - Encoding type of the file mimetype - Mime type of the file path - Location of the uploaded file extension - Extension of the file size - Size of the file in bytes truncated - If the file was truncated due to size limitation buffer - Raw data (is null unless the inMemory option is true) 

为什么大小被返回为0?

编辑:虽然文件大小返回0文件的其他属性,如file.originalname正在工作,并返回正确的名称。

编辑2:当我打印onFileUploadStart函数内的文件,我得到以下属性和关联的值:

 { filename: 'userFile', originalname: 'name.png', name: 'name.png', encoding: '7bit', mimetype: 'image/png', path: 'uploads\\name.png', extension: 'png', size: 0, truncated: null, buffer: null } 

为什么multer节点模块正确地发送一切,但文件大小?

EDIT3:

request.body打印以下内容:

 { submit: 'upload file' } 

这很奇怪。 我在下面的代码中打印请求正文:

 app.post('/upload/', function(request, response){ console.log(request.body); if (done == true){ response.end('file uploaded'); } }); 

index.html客户端可以上传文件的文件:

 <html> <head> </head> <body> <form id= "upload" enctype= "multipart/form-data" action="/upload/" method="post"> <input type="file" name="userFile" /> <input type="submit" name="submit" value="upload file" /> </form> </body> </html> 

上传完成后,您只能获得总文件大小,因为文件是stream式传输的。

如果您查看源代码,您可以看到初始大小设置为0,然后随着数据事件一起增加。