2015-02-11 48 views
1

我正在创建一个应用程序,它接收来自node.js中几个客户端的文件。为此,我使用快递多功能节点模块。multer nodejs模块onFileUploadStart file.size返回0

在下面的代码我处理文件上传:

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); 
    } 
})); 

但是,当我的onFileUploadStartfile.size进入里面是0

一个multer文件对象具有以下属性JSON对象所以我知道尺寸属性存在。

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正在工作并返回正确的名称。

EDIT2: 当我打印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> 
+0

你能显示你的请求正文吗? – 2015-02-11 11:39:59

+0

@BenDiamant新增 – JoaoFilipeClementeMartins 2015-02-11 11:44:54

+0

哪里?不能看到它 – 2015-02-11 11:45:58

回答

1

你只能得到总文件大小上载有后完成,因为文件是流式传输的。

如果你看看source,你可以看到初始大小设置为0,然后随着data事件一起增加。

+0

所以,也许如果我想提供用户反馈多少上传我应该使用另一个模块?你能提供一些能帮助我做到的模块吗? – JoaoFilipeClementeMartins 2015-02-11 11:47:53

+0

'onFileUploadStart'将始终返回0.'onFileUploadData'将包含迄今为止上传的总数。 – 2015-02-11 11:51:51

+0

我明白了。但后来我不能做我想要的东西,就是说需要多长时间 – JoaoFilipeClementeMartins 2015-02-11 11:52:50