如何在node.js中只下载文件的前10 KB
how can I download only first 10 kilobyte of a file in node.js
在node.js中,我如何下载特定数量的文件,比如文件的前10 KB。
在我的项目中,我需要从远程文件中提取mp3持续时间和比特率,我认为唯一的方法就是下载几个字节到整个文件。
正如一些人在这里所说,如果你下载(至少)文件的前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();
}
});
})
致问候,
相关文章:
- 如何播放部分音频文件
- 从桌面读取python文件时高亮显示代码
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 如何使用WCF服务和javascript表单post上传.doc文件
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 如何在生成下载文件时显示加载动画
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- Javascript-如何读取json文件中的列并将其保存在Javascript数组中
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- 正在SharePoint 2013母版页中添加JQuery移动文件
- 如何在php文件中获取$.post-ajax传递的值
- 直接下载文件,而不是从window.open(url)
- 如何在android中使用phonegap将文件从一个文件夹移动/复制到另一个文件夹
- 如何在node.js中只下载文件的前10 KB
- 获取以mb或kb为单位的文件大小
- NetBeans没有't扫描”;“大”;(350 KB+)javascript文件
- 500 内部服务器 上传超过 100 KB 的文件时出错
- 避免将0 KB文件附加到文件上传控件
- XMLHttpRequest只发送最大130 kB大小的文件
- 在php中以KB / MB / GB格式获取远程文件大小