node.js - Nodejs 分段文件上传,生成的文件比原始文件大

标签 node.js express encoding upload multipart

我想使用 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/

相关文章:

javascript - 如何在 mongodb 中使用 $nin 运算符从集合中获取文档

linux - Freepascal,Indy SVN 主干版本,PHP 客户端在传输 XML 时没有收到任何信息,直到删除编码转换

java - 读取图像文件时保持编码

python - 有谁知道将现有 csv 文件转换为 UTF-8 编码的简单函数?

node.js - Express 中的压缩中间件顺序

javascript - 如何从 PEG.js 解析器导出状态变量

node.js - Node 集群 worker 内存使用情况

node.js - 重构后,Sequelize 不会读取新的模型名称(删除最终模型名称中的 s)

javascript - 如何从第二个导出函数调用第一个导出函数?

node.js - typescript 编译器错误 TS2307 : Cannot find module "angular2/core" when loading from CDN without NPM