Я извлекаю этот 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));
;
}