如何从重定向的网址下载mp3文件? (在Node.js中)

时间:2019-05-18 17:40:38

标签: node.js amazon-web-services amazon-s3 axios node-modules

我使用以前的逻辑-https://bots.rocket.chat/file-upload/ZSzGtWdXyP8DZwrQ9/Audio%20record.mp3

来检索此URL。

现在,我需要下载它进行进一步处理,但是我尝试使用下载,axios.request和其他可用软件包。我对他们失败的最好猜测是,音频的实际URL与我检索到的不同。

类似的东西(一段时间后会改变)-https://s3.amazonaws.com/uploads.use1.cloud.rocket.chat/KqCQiHfeFaKdSEGvy/uploads/GENERAL/XmYemgXfudSzBQstR/ZSzGtWdXyP8DZwrQ9?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAILPK6SHTK5RJZLHQ%2F20190518%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20190518T115900Z&X-Amz-Expires=120&X-Amz-Signature=8d793d14fbb33d78b084a5ed153106ba19440feb7bf05525aeed530b5a0907f9&X-Amz-SignedHeaders=host

此外,当我提供带有结束URL(较长的URL)的文件时,我可以使用相同的代码下载文件。 因此,需要弄清楚如何在节点中到达该URL。

还要访问第一个URL,您需要在https://bots.rocket.chat上注册一个帐户

这是我当前拥有的代码。传递给getFile函数的url是一个相对路径,我将其附加到前缀url以形成上述较短的URL,然后调用axios,这是行不通的。

但是当我用长网址替换该网址时,该网址类似于上面代码中发布的较长网址,就可以了。

async function getFile(url) {
  var fs = require('fs');
  return await axios.request({
    responseType: 'arraybuffer',
    followAllRedirects: true,
    url: `https://bots.rocket.chat${url}`,
    method: 'get',
    headers: {
      'Content-Type': 'audio/mpeg',
    },
  }).then((result) => {
    const outputFilename = 'file2.mp3';
    fs.writeFileSync(outputFilename, result.data);
    return outputFilename;
  })
    .catch(err => console.log(err));
  ;
}

0 个答案:

没有答案