【问题标题】:Nodejs Multipart File Upload, Resulting File Larger Than OriginalNodejs 多部分文件上传,生成的文件比原始文件大
【发布时间】:2014-12-04 13:02:10
【问题描述】:

我想使用 Express 4 为 Nodejs 服务器编写文件上传器。我不想使用任何中间件来实现这一点,因为这更像是一个学术练习,以更好地了解 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');
    });
});

我的问题是,当文件最终写出时,比原来的要大。例如,如果我要上传带有此代码的 MP3,该代码最初为 10.5 MB,则结果为 11 MB。我相信这与将编码从正文来回切换到写出有关。我也明白 node 并没有真正的二进制编码,这可能是个问题吗?

我还认为这可能是因为我没有剥离数据的边界或 Content-Disposition(一旦运行良好,这将是下一步),但边界和 Disposition 仅约为 300字节不是 500KB。有没有人有解释或者可以指出我做错了什么,我将不胜感激。

其他信息: + 快递 4 + 除了 cookieparser,我目前没有使用任何中间件 + Ubuntu 12.04 + 节点 v0.10.31

【问题讨论】:

  • 我不得不问您是否使用相同的界面比较尺寸。例如,我有一个下载的 zip,它在 Finder 中显示 2.3MB,但在终端中使用 ls -lah 显示 2.2MB。
  • @TimothyStrimple 嗨蒂莫西。这很有趣。我以为我使用相同的界面来检查大小,文件资源管理器和它报告的大小不同。我认为从浏览器中选择的文件计算的千字节数不同。当我用 ls -lah 检查它们时,它确实以相同的大小报告了它们。为了进一步研究这一点,我使用wc -c 检查了这两个文件以获得严格的字节数。差异只有几百字节,这将解释边界和配置。谢谢今天学到了重要的一课哈哈。你认为我应该删除这个吗?
  • 不,对于有类似问题的其他人来说,这可能是一个很好的资源。

标签: node.js express encoding upload multipart


【解决方案1】:

仔细检查您是否在此处比较苹果和苹果。操作系统上的不同界面可以以不同的方式计算大小,这可能会显示完全相同文件的数百千字节的差异。例如,我现在在我的计算机上有一个文件,它在 Finder 中显示 2.3MB,但在使用 ls -h 时在终端中显示 2.2MB。

【讨论】:

  • 那么为什么 Ubuntu 将 KB 计为 1000 字节而不是 1024 字节。对于假设 Kilo(如简单的 1000)或 KB 为 1024 的普通用户来说,这是否更多?
  • 我不知道其中的所有讨论,但 Ubuntu 已经声明他们正在改变他们的单位政策。看看wiki.ubuntu.com/UnitsPolicy
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-27
  • 1970-01-01
  • 2014-10-16
  • 1970-01-01
相关资源
最近更新 更多