Firebase Storage Telegram Bot: загрузка и выгрузка аудио файлов - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь загрузить аудиофайлы, которые были переданы пользователем через бот 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 (невозможно воспроизвести) enter image description here

Открытие аудиофайла, который был загружен напрямую с помощью консоли Firebase (можно воспроизвести) enter image description here

Я также заметил, что размеры файлов тоже различаются:

  • Загружен с помощью бота telegram -> 147 КБ
  • Загружен с использованием Firebase консоль -> 87 КБ

Фактический размер аудиофайла составляет около 87 КБ.

...