kak*_*ais 4 node.js coffeescript busboy
我使用 busboy 模块通过下面的 coffeeScript 代码解析多部分请求。有时,问题是针对包含一个文件的请求多次调用“数据”处理程序。这意味着我需要对每个尺寸求和才能计算出整个尺寸。除了 on 'file' 处理程序中的文件对象似乎不包括大小信息。
如何在不计算每个部分的情况下获得整个尺寸?
提前致谢-
busboy.on 'file', (fieldname, file, filename, encoding, mimetype) ->
filename = "#{Meteor.uuid()}.jpg"
dir = "#{HomeDir()}/data/profile"
saveTo = path.join dir, filename
file.pipe fs.createWriteStream saveTo
files.push
filename: filename
path: saveTo
fileSize: data.length
file.on 'data', (data) ->
# this data handler called several times
files.push
filename: filename
path: saveTo
fileSize: data.length
file.on 'end', ->
console.log 'file finished'
Run Code Online (Sandbox Code Playgroud)
由于您已经将流传输到文件,因此您需要使用以下内容stream-meter:
var meter = require('stream-meter');
...
busboy.on('file', function(fieldname, file, filename, encoding, mimetype) {
...
var m = meter();
file.pipe(m).pipe(fs.createWriteStream(saveTo)).on('finish', function() {
files.push({
filename : filename,
path : saveTo,
fileSize : m.bytes,
});
});
});
Run Code Online (Sandbox Code Playgroud)
这是一个非常晚的回应。我希望它会有所帮助。
request.headers['content-length']会给你整个文件的大小。你不需要busboy那个。它是请求对象的一部分,可以按如下方式访问:
http.createServer(function(request, response) {
/* request handling */
console.log("File size:" + request.headers['content-length'] / 1024 + "KB");
/* busboy code to parse file */
}Run Code Online (Sandbox Code Playgroud)
使用标头大小信息来跟踪文件传输进度的示例可以在以下位置找到: NodeJS - 使用 Core NodeJS 和原始 Node 解决方案的带进度条的文件上传
编辑:
正如@Matthias Tylkowski 所指出的,内容长度与文件大小不同。
从那时起我自己的代码也发生了变化。我注意到在我使用 NODEJS 实现的文件上传器中,我直接使用HTML5 文件 API读取文件大小并将其传递到 Nodejs 服务器。
| 归档时间: |
|
| 查看次数: |
5191 次 |
| 最近记录: |