【发布时间】:2015-05-25 06:05:19
【问题描述】:
这样做的目的是在 node-webkit 中下载正在进行的 mp3 流的一部分,即“剪辑”,因此我必须能够在任意位置停止下载而不是使用正确的文件。
首先,我必须了解 nwjs 是如何下载流的,我在这里找到了示例代码: http://sebastiandelgado.info/node-streams-for-node-webkit-apps/
我添加了第 17 到 21 行,作为测试,看看我是否可以下载任意数量的字节并播放文件。
这行得通,但我收到了一个解析错误,因为 on-data 仍在尝试写入我已关闭的文件流,所以我在第 25 行添加了一个标志并修复了错误。
剩下的一个问题是停止 http-stream,我需要关闭连接,所以我做了更多的阅读。
我查看了 http.get() 的文档并被引导到 http.response(): https://nodejs.org/docs/latest/api/http.html
这反过来又使我收到了传入消息: https://nodejs.org/docs/latest/api/http.html#http_http_incomingmessage
"...它实现了 Readable Stream 接口,以及以下附加事件、方法和属性。 事件:'关闭'# 函数 () { }..."
所以我在第 19 行试了一下。
那-确实-工作了,http连接停止了流式传输,但是,它也发出了错误:
Uncaught TypeError: undefined is not a function
events.js:125 Uncaught Error: Parse Error
代码有效,mp3 下载和 http-stream 停止,没有有害影响...但我想知道如何修复错误。
我正在使用 nwjs 0.12.0,它使用 node.js 的 io.js 分支,到目前为止对结果感到满意。
NWEXE=path-to-nw.exe
01 function dlstream ()
02 {
03
04 var http = require('http');
05 var fs = require('fs');
06 var flag = true;
07
08 var req = http.get('http://streams1.kpfa.org:8000/kpfa_64', function(res) {
09
10 var bytesDownloaded = 0;
11 var fileName = 'Download.mp3';
12 var writeStream = fs.createWriteStream(NWEXE + '/' + fileName);
13
14 res.on('data', function(data) {
15
16 //test to arbitrarily end download/close http-stream
17 if(bytesDownloaded > (1024*16)){
18 writeStream.end(); //close file stream
19 req.close(); //close http connection
//ans: use req.destroy() instead of req.close()
20 flag=false; //set closed flag
21 }
22 bytesDownloaded += data.length;
23
24 //flag so we don't write to a closed file-stream
25 if(flag){
26 writeStream.write(data);
27 }
28 });
29 });
30 }
【问题讨论】:
标签: node.js node-webkit