Node / Busboy:获取文件大小
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Node / Busboy:获取文件大小相关的知识,希望对你有一定的参考价值。
我使用busboy模块解析下面的coffeeScript代码的多部分请求。问题是,有时,对于包括一个文件的请求多次调用“数据”处理程序。这意味着我需要总结每个尺寸来计算整个尺寸。除了“文件”处理程序中的文件对象似乎不包括大小信息。
如何在不计算每个部分的情况下获得整个尺寸?
提前致谢-
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'
答案
由于您已将流传输到文件,因此需要使用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,
});
});
});
另一答案
这是一个非常晚的回应。我希望它会有所帮助。
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 */
}
以上是关于Node / Busboy:获取文件大小的主要内容,如果未能解决你的问题,请参考以下文章
错误 - ./node_modules/busboy/lib/main.js:1:0 找不到模块:无法解析“fs”
节点 js busboy 不使用 angular js $http post 发出事件
如何在 Cloud Functions for Firebase(multer、busboy)上使用 express 执行 HTTP 文件上传