Загрузить файл в хранилище Firebase с помощью функций Firebase - PullRequest
0 голосов
/ 11 июля 2020

У меня есть программа, которая позволяет пользователям загружать видеофайлы в хранилище firebase. Если файл не в формате mp4, я отправляю его на сторонний сайт преобразования видео, чтобы преобразовать его в mp4. Они попадают в веб-перехватчик (функция firebase) с URL-адресом и другой информацией о преобразованном файле.

Прямо сейчас я пытаюсь загрузить файл в каталог tmp в функциях firebase, а затем отправить его в хранилище firebase. У меня есть следующие вопросы:

  1. Могу ли я обойти загрузку файла в каталог functions tmp и просто сохранить его непосредственно в хранилище? если да, то как?

  2. У меня в настоящее время возникают проблемы с загрузкой в ​​функции tmp dir, ниже - мой код. Функция возвращает Function execution took 6726 ms, finished with status: 'crash'

export async function donwloadExternalFile(url:string, fileName:string) {

    try {
      
        const axios  = await import('axios')
        const fs = await import('fs')  

        const workingDir = join(tmpdir(), 'downloadedFiles')
        const tmpFilePath = join(workingDir, fileName) 

        const writer = fs.createWriteStream(tmpFilePath);

        const response = await axios.default.get(url, { responseType: 'stream' })

        response.data.pipe(writer);

        await new Promise((resolve, reject) => {
            writer.on('error', err => {
                writer.close();
                reject(err);
            });

            writer.on('close', () => {
                resolve();
            });
        });

        return 

    } catch (error) {
        throw error 
    }

  }

1 Ответ

1 голос
/ 16 июля 2020

Как упоминалось выше в разделе комментариев, вы можете использовать Cloud Storage Node.js SDK , чтобы выполнить загрузку вашего файла в Cloud Storage.

Пожалуйста, обратите внимание на Справочная документация клиента SDK , где вы можете найти множество примеров и дополнительную информацию об этой клиентской библиотеке Cloud Storage.

Также я хотел бы напомнить вам, что вы можете обойти запись в / tmp с помощью конвейера. Согласно документации для облачных функций, «вы можете обработать файл в облачном хранилище, создав поток чтения, пропустив его через потоковый процесс и записав выходной поток непосредственно в облачное хранилище. . "

И последнее, но не менее важное: всегда удаляйте временные файлы из локальной системы Cloud Function. Несоблюдение этого требования может в конечном итоге привести к нехватке памяти и последующим холодным запускам.

...