在node.js中,如何才能下载特定数量的文件,例如只有前10千字节的文件。如何才能在node.js中下载第一个10千字节的文件
在我的项目中,我需要从远程文件中提取mp3持续时间和比特率,我认为唯一的方法就是将几个字节下载到整个文件中。
正如有些人所说here如果您下载(至少)该文件的第一个32kB,你应该可以为大多数MP3文件。
在node.js中,如何才能下载特定数量的文件,例如只有前10千字节的文件。如何才能在node.js中下载第一个10千字节的文件
在我的项目中,我需要从远程文件中提取mp3持续时间和比特率,我认为唯一的方法就是将几个字节下载到整个文件中。
正如有些人所说here如果您下载(至少)该文件的第一个32kB,你应该可以为大多数MP3文件。
在Node.js中,您知道一块数据何时可用。如果你做了一个http请求,你会得到一个包含头文件的响应对象。这个响应对象也是一个包含事件的流。您正在搜索的是"data"
。通过这个事件,你会得到一个充满接收数据的缓冲区(只有新数据,以前收到的数据块不存在)。每当你得到一块数据时,你只需要有一个缓冲区并追加到它。你也可以获得缓冲区的长度。当您有足够的数据使用方法destroy
方法时,您可以选择停止下载数据。这里是一个例子:
var http = require("http");
var buff = new Buffer(0);
http.get("http://epfl.ch", function(res) {
res.on('data', function(chunk) {
buff = Buffer.concat([buff, chunk]);
if (buff.length > 10240) {
res.destroy();
console.log(buff);
}
});
})
这段代码将等待提取10kb字节,然后结束请求。然后,你可以斗要与数据的任何(BUFF)
如果你想将数据保存到文件下载时,你可以这样做,而不是:
var http = require("http");
var buff = new Buffer(0);
var fs = require("fs");
var file = fs.createWriteStream("file.mp3");
http.get("http://epfl.ch", function(res) {
res.pipe(file);
res.on('data', function(chunk) {
buff = Buffer.concat([buff, chunk]);
if (buff.length > 10240) {
res.destroy();
file.close();
console.log(buff);
}
});
})
此代码将创建一个输入流文件并将请求的主体传递给此文件(即,接收到的每个数据块都将附加到文件中)。
如果您不想对缓冲区执行任何操作,则不需要保留该缓冲区,只需计算接收到的字节数,并在需要时停止。
var http = require("http");
var bytesRecieved = 0;
var fs = require("fs");
var file = fs.createWriteStream("file.mp3");
http.get("http://epfl.ch", function(res) {
res.pipe(file);
res.on('data', function(chunk) {
bytesRecieved += chunk.length;
if (bytesRecieved > 10240) {
res.destroy();
file.close();
}
});
})
最好的问候,
谢谢,如果提取10kb的mp3文件,extraxting持续时间和比特率我需要保存到新文件,而不是使用id3js? – alireza 2015-04-04 18:10:50
我用这个信息更新了我的答案 – 2015-04-04 18:26:00
开始下载,收听数据事件,跟踪你多少字节读取和中止后10KB – 2015-04-04 17:37:35
@BenjaminGruenbaum你有什么例子,我在一个新手node.js中 – alireza 2015-04-04 17:40:07