我想使用 Express 4 为 Nodejs 服务器编写一个文件 uploader 。我不想使用任何中间件来实现此目的,因为这更像是一项学术练习,旨在更好地理解 Nodejs 的工作原理和分段上传。
下面只是 Express 4 中收集客户端数据并将其写出的路由的主要代码。
var clientData = [];
// When Data Arrives
req.on('data', function(data){
clientData.push(data);
});
// Done
req.on('end', function(){
var output = Buffer.concat(clientData);
fs.writeFile('Thisisthesong.mp3', output, 'binary', function(err){
if (err) throw err;
debug('Wrote out song');
});
});
我的问题是,当文件最终写出时,它比原始文件大。例如,如果我使用此代码上传最初为 10.5 MB 的 MP3,则结果为 11 MB。我相信这与从正文到写出编码来回切换有关。我还了解到 Node 并不真正具有二进制编码,这会是一个问题吗?
我还认为这可能是因为我没有剥离数据的边界或内容处置(一旦运行良好,这将是下一步),但边界和处置只有大约 300 字节而不是 500KB。有谁能解释一下或者指出我做错了什么,我将不胜感激。
Other Info: + Express 4 + I'm not using any middleware at the moment besides cookieparser + Ubuntu 12.04 + Node v0.10.31
最佳答案
仔细检查您是否在此处进行同类比较。操作系统上的不同接口(interface)可以以不同的方式计算大小,这对于完全相同的文件可能显示数百KB的差异。例如,我的计算机上现在有一个文件,在 Finder 中显示为 2.3MB,但使用 ls -h 时在终端中显示为 2.2MB。
关于node.js - Nodejs 分段文件上传,生成的文件比原始文件大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26281122/