menu 某小二的生活圈
nodejs下载网络上的音频到本地
307 浏览 | 2021-03-23 | 阅读时间: 约 1 分钟 | 分类: 后端,随笔,笔记 | 标签: javascript,es6,nodeJS
请注意,本文编写于 94 天前,最后修改于 82 天前,其中某些信息可能已经过时。

使用nodejs做爬虫的时候遇到了一个难题,就是明明已经得到了mp3的地址,而使用nodejs文件流写入的时候老是报错,一个网络地址前面就会突然冒出来当前文件的地址

const fs =require("fs")

let redfim=fs.createReadStream("https://webfs.yun.kugou.com/202102050900/3b3b141822a2c16a3010be1aff05db47/KGTX/CLTX001/6d8a225bdd12f2e0d397b256a3b40676.mp3")

redfim.on("data",function(err,data){
        if(err){
            console.log(err);
        }else{
            console.log(data);
        }
})
redfim.on("end",function(){
    console.log("下载完成");
})

结果就会出现这个报错

events.js:292
      throw er; // Unhandled ''error'' event
      ^

Error: ENOENT: no such file or directory, open ''F:\学习区\nodejs\puppeteer\src\https:\webfs.yun.kugou.com\202102050900\3b3b141822a2c16a3010be1aff05db47\KGTX\CLTX001\6d8a225bdd12f2e0d397b256a3b40676.mp3''
Emitted ''error'' event on ReadStream instance at:
    at internal/fs/streams.js:147:14
    at FSReqCallback.oncomplete (fs.js:171:23) {
  errno: -4058,
  code: ''ENOENT'',
  syscall: ''open'',
  path: ''F:\\学习区\\nodejs\\puppeteer\\src\\https:\\webfs.yun.kugou.com\\202102050
900\\3b3b141822a2c16a3010be1aff05db47\\KGTX\\CLTX001\\6d8a225bdd12f2e0d397b256a3b40676.mp3''
}

现在都比较懵逼,地址为啥会变....

最后解决方法是从网上找见的,她的意思是使用request请求,同时使用管道流来写入pipe

代码如下:

const fs =require("fs")
const request = require(''request'');
const ws = fs.createWriteStream("mp.mp3");

request("https://webfs.yun.kugou.com/202102050900/3b3b141822a2c16a3010be1aff05db47/KGTX/CLTX001/6d8a225bdd12f2e0d397b256a3b40676.mp3").pipe(ws);

ws.on("finish", function(){

console.log("下载完成");

});

结果就成功啦

PS F:\学习区\nodejs\puppeteer\src> node firm.js
下载完成
PS F:\学习区\nodejs\puppeteer\src>

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

全部评论

info 评论功能已经关闭了呐!