如何从 Node.js 中的 URL 下载音频文件?

新手上路,请多包涵

如何从 URL 下载音频文件并将其存储在本地目录中?我正在使用 Node.js 并尝试了以下代码:

 var http = require('http');
var fs = require('fs');
var dest = 'C./test'
var url= 'http://static1.grsites.com/archive/sounds/comic/comic002.wav'
function download(url, dest, callback) {
  var file = fs.createWriteStream(dest);
  var request = http.get(url, function (response) {
    response.pipe(file);
    file.on('finish', function () {
      file.close(callback); // close() is async, call callback after close completes.
    });
    file.on('error', function (err) {
      fs.unlink(dest); // Delete the file async. (But we don't check the result)
      if (callback)
        callback(err.message);
    });
  });
}

没有发生错误,但未找到该文件。

原文由 Rajasekar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 927
2 个回答

如何使用 Node.js 下载文件(不使用第三方库)的副本? ,但这是针对您的问题的代码:

 var http = require('http');
var fs = require('fs');

var file = fs.createWriteStream("file.wav");
var request = http.get("http://static1.grsites.com/archive/sounds/comic/comic002.wav", function(response) {
  response.pipe(file);
});

原文由 Gabe Rogan 发布,翻译遵循 CC BY-SA 3.0 许可协议

这是一个将 Axios 与可能需要授权的 API 结合使用的示例

 const Fs = require('fs');
const Path = require('path');
const Axios = require('axios');

async function download(url) {
    let filename = "filename";
    const username = "user";
    const password = "password"
    const key = Buffer.from(username + ':' + password).toString("base64");
    const path = Path.resolve(__dirname, "audio", filename)
    const response = await Axios({
        method: 'GET',
        url: url,
        responseType: 'stream',
        headers: { 'Authorization': 'Basic ' + key }
    })
    response.data.pipe(Fs.createWriteStream(path))
    return new Promise((resolve, reject) => {
        response.data.on('end', () => {
            resolve();
        })
        response.data.on('error', () => {
            reject(err);
        })
    })
}

原文由 sweden_chat 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题