gpt4 book ai didi

javascript - 我怎样才能在 node.js 中只下载文件的前 10 KB

转载 作者:行者123 更新时间:2023-11-30 16:57:30 25 4
gpt4 key购买 nike

在 node.js 中,我如何下载特定数量的文件,比如文件的前 10 KB。

在我的项目中,我需要从远程文件中提取 mp3 持续时间和比特率,我认为唯一的方法是将几个字节下载到整个文件。

正如一些人所说 here如果您下载(至少)文件的前 32kB,您应该可以下载大多数 MP3 文件。

最佳答案

在 Node.js 中,您知道数据 block 何时可用。如果你做一个 http 请求,你会得到一个包含标题的响应对象。这个响应对象也是一个带有事件的流。您要搜索的是 "data"。有了这个事件,你会得到一个缓冲区,里面装满了接收到的数据(只有新数据,之前接收到的数据 block 不存在)。您只需要有一个缓冲区并在每次获取数据 block 时附加到它。您还可以获得缓冲区的长度。您可以使用 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);
}
});
})

这段代码将为一个文件创建一个输入流,并将请求的主体通过管道传输到这个文件(即接收到的每个数据 block 都将附加到文件中)。

如果您不想对您的缓冲区做任何事情,您不需要保留它,您可以只计算接收到的字节数并在需要时停止。

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();
}
});
})

最好的问候,

关于javascript - 我怎样才能在 node.js 中只下载文件的前 10 KB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29449437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com