这样做的目的是在node-webkit下载一个正在进行的mp3流的部分,一个'剪辑',所以我必须能够在任意点停止下载而不是消费一个合适的档案。
首先,我必须了解nwjs如何下载流,我在这里找到了示例代码: http://sebastiandelgado.info/node-streams-for-node-webkit-apps/
我添加第17到21行作为测试,看看我是否可以下载任意数量的字节并播放文件。
这很有用,但是我得到了一个解析错误,因为on-data仍在尝试写入我已经关闭的文件流,所以我在第25行添加了一个标志并修复了错误。
剩下的一个问题是停止http流,我需要关闭连接,所以我做了更多阅读。
我查看了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接口,以及以下附加事件,方法和属性。 事件:'关闭'# function(){} ......"
所以我在第19行试了一下。
那个-did-工作,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 fork,对结果感到满意,到目前为止。
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 }
答案 0 :(得分:0)
好的,答案是req.close(),我不得不使用req.destroy()。
停止可读流而不抛出错误。