Как отправить файл из облачного хранилища, используя response.sendFile в облачных функциях? - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь отправить ответ клиенту, используя http-триггер из облачных функций Firebase.Когда я отправлял ответ, используя расположение файла из Cloud Storage, метод sendFile выдает эту ошибку:

"path must be absolute or specify root to res.sendFile"

res.sendFile(obj.path(param1, param2, param3, param4));

obj.path (param1, param2, param3, param4), это создает путь к gs: //или https: // с параметрами.

Тогда я решил сделать это:

const rp = require("request-promise");

exports.fun = functions.https.onRequest( async (req, res) => {
let extResponse = await rp('firebase storage location');
          extResponse.pipe(res);
});

rp теперь возвращает эту ошибку:

StatusCodeError: 403 - "{\n  \"error\": {\n    \"code\": 403,\n    \"message\": \"Permission denied. Could not perform this operation\"\n  }\n}"

Эта ошибкаЭто связано с тем, что облачное хранилище требует проверки подлинности запроса, чтобы служба могла загрузить файл из хранилища.

Есть ли способ заставить эту работу работать и вернуть файл обратно клиенту?

1 Ответ

0 голосов
/ 31 января 2019

sendFile не будет работать, потому что он не понимает URL.Это понимают только файлы в локальной файловой системе.Для этого вы должны использовать Cloud Storage SDK для узла .Создайте объект File , который указывает на файл, который вы хотите отправить, откройте для него поток чтения, а затем направьте поток к ответу:

const file = ... // whatever file you want to send
const readStream = file.createReadStream()
readStream.pipe(res)
...