Я пытаюсь загрузить аудиофайлы, которые были переданы пользователем через бот Telegram, в хранилище Firebase. Моя реализация работает, но кажется, что аудиофайл поврежден, ie невозможно воспроизвести загруженный аудиофайл при открытии из консоли Firebase.
Код:
//Telegram bot
bot.on('audio', ctx => {
let audio = ctx.update.message.audio
let fileId = audio.file_id
return getFilePath(fileId)
.then((path) => {
let url = `https://api.telegram.org/file/bot${botToken}/${path}`
return axios.get(url)
.then((response) => {
let data = Buffer.from(response.data)
let path = `test/file_response.mp3`
return saveToStorage(data, "audio/mpeg", path)
})
.then((url) => {
console.log(url)
})
})
})
function getFilePath(path) {
let url = `https://api.telegram.org/bot${botToken}/getFile?file_id=${path}`
return axios.get(url)
.then((response) => {
console.log(response.data)
return response.data.result.file_path
})
}
var bucket = admin.storage().bucket();
function saveToStorage(data, contentType, storagePath) {
let file = bucket.file(storagePath)
return new Promise((resolve, reject) => {
let uuid = uuidv4();
let metadata = {
contentType: contentType,
metadata: {
firebaseStorageDownloadTokens: uuid
}
}
file.save(data, {metadata: metadata}, err => {
if (err) {
reject(err)
} else {
let url = "https://firebasestorage.googleapis.com/v0/b/"
+ bucket.name
+ "/o/"
+ encodeURIComponent(storagePath)
+ "?alt=media&token="
+ uuid
resolve(url)
}
})
})
}
Пример аудиофайла Для проверки функции используется правильный аудиофайл .mp3. Загрузка примера аудиофайла непосредственно в хранилище Firebase с помощью консоли работает правильно, но при загрузке с использованием кода он не работает.
Вот снимок экрана при попытке открыть аудиофайл из хранилища:
Открытие аудиофайла, который был загружен с помощью бота telegram (невозможно воспроизвести)
Открытие аудиофайла, который был загружен напрямую с помощью консоли Firebase (можно воспроизвести)
Я также заметил, что размеры файлов тоже различаются:
- Загружен с помощью бота telegram -> 147 КБ
- Загружен с использованием Firebase консоль -> 87 КБ
Фактический размер аудиофайла составляет около 87 КБ.