Как получить размеры изображения из хранилища Firebase в функциях Firebase? - PullRequest
1 голос
/ 30 мая 2019

У меня есть приложение с поддержкой Firebase. и когда я сделал это, я не думал о размерах изображений, как будто они будут полезны в будущем, поэтому я просто сохранил изображения такими, какие они есть, и сохранил их URL в firestore.

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

Итак, я перепробовал почти все, чтобы получить размеры файлов в функциях, но не смог этого сделать.

образец [аннотация код]

этот код работает в node.js, но не работает в функциях firebase

    const fs = require('fs')
    const request = require('request')
    import sizeOf from 'image-size'
    const FIRE = 'https://firebasestorage.googleapis.com/file....'
    const FILE = 'file.jpg';

    request.head(FIRE, (err, res, body) => {
        request(FIRE)
            .pipe(fs.createWriteStream(FILE))
            .on('close', () => {
                sizeOf(FILE, (err1, dimensions) => {
                    const result = {
                        "width": dimensions.width,
                        "height": dimensions.height
                    }
                    console.log(dimensions.width, dimensions.height);
                    fs.unlinkSync(FILE);
                    response.setHeader('Content-Type', 'application/json');
                    const responseData = {
                        'Error': false,
                        'Message': "result : " + result
                    };
                    response.send(JSON.stringify(responseData));
                })
            })
    })

помогите мне, если кто-то что-то знает об этом!

и более того, также расскажите мне о том, как firebase хранит изображения, я имею в виду, каким образом? всякий раз, когда я открываю URL-адрес, он не показывает мне изображение, вместо этого он просто загружает изображение без других ссылок на случайные веб-сайты.

У меня есть хитрость, чтобы сделать это. Это довольно подвержено ошибкам, но будет работать наверняка:

получить все URL-адреса изображений с помощью API-интерфейса и выполнить все локально с помощью node.js и отправить результат в другой API-интерфейс, который затем передаст данные в firestore?

1 Ответ

1 голос
/ 30 мая 2019

Ваш код пытается написать:

const FILE = 'file.jpg';

Это файл в том же каталоге, где хранится ваш index.js. Это (как говорится в сообщении об ошибке) доступный только для чтения каталог в контейнере облачных функций. Если вы хотите записать какие-либо файлы, они должны быть в /tmp (также известном как tempfs). См. Запись временных файлов из облачной функции Google

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...