Как скачать mp3 файл с URL, который перенаправляет?(В Node.js) - PullRequest
0 голосов
/ 18 мая 2019

Я извлекаю этот URL из предыдущей логики - https://bots.rocket.chat/file-upload/ZSzGtWdXyP8DZwrQ9/Audio%20record.mp3

Теперь мне нужно загрузить его для дальнейшей обработки, но я попытался использовать download, 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 вам необходимо создать учетную запись на https://bots.rocket.chat

Это код, который у меня есть в настоящее время.URL-адрес, переданный функции getFile, является относительным путем, который я добавляю к URL-адресу префикса, чтобы сформировать упомянутый выше короткий URL, и вызываю axios, и это не работает.

Но когда я заменяю URL-адрес надлинный URL, похожий на длинный, размещенный над кодом, работает просто отлично.

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));
  ;
}
...