невозможно загрузить изображение в облачную систему из облачной функции Firebase - PullRequest
0 голосов
/ 19 сентября 2018

Согласно документации cloudinary можно загружать изображение в cloudinary с помощью облачного хранилища Google.

Однако, когда я пытаюсь это сделать, в моем облаке появляется следующая ошибкажурналы функций.

ENOENT: no such file or directory, open 'gs://my-bucket.appspot.com/01.jpg'

это моя облачная функция:

import * as functions from 'firebase-functions';
import * as cloudinary from 'cloudinary';

cloudinary.config({
  cloud_name: functions.config().cloudinary.cloudname,
  api_key: functions.config().cloudinary.apikey,
  api_secret: functions.config().cloudinary.apisecret,
});


export const uploadImageToCloudinary = functions.storage
  .object()
  .onFinalize(object => {
    cloudinary.v2.uploader.upload(
      `gs://${object.bucket}/${object.name}`,
      function(error, result) {
        if (error) {
          console.log(error)
          return;
        }
        console.log(result);
      }
    );
  })

Я добавил /.wellknown/cloudinary/<cloudinary_cloudname> в свое ведро, а также добавил разрешение в облачной платформе, чтобы разрешить облачный object viewer доступ

Есть ли дополнительный шаг, который я пропускаю - кажется, я не могу заставить это работать?!

1 Ответ

0 голосов
/ 19 сентября 2018

Cloudinary поддерживает загрузку в облачное хранилище Google, но это относительно новая функция, и текущая версия SDK узла не обрабатывает gs:// URL-адреса.

В вашем примере он пытается разрешить URL-адрес gs:// на локальном сервере и отправить изображение в Cloudinary, а не отправлять URL-адрес в Cloudinary, чтобы выборка происходила со стороны Cloudinary.

Пока это не добавлено в SDK, вы можете получить эту работу, запустив выборку , используя метод загрузки на основе URL , или внеся небольшое изменение в код SDK.

Специально, это небольшое изменение в lib/uploader.js - вам нужно добавить туда префикс gs:, после чего он должен работать нормально.

Diff:

diff --git a/lib/uploader.js b/lib/uploader.js
index 2f71eaa..af08e14 100644
--- a/lib/uploader.js
+++ b/lib/uploader.js
@@ -65,7 +65,7 @@
     return call_api("upload", callback, options, function() {
       var params;
       params = build_upload_params(options);
-      if ((file != null) && file.match(/^ftp:|^https?:|^s3:|^data:[^;]*;base64,([a-zA-Z0-9\/+\n=]+)$/)) {
+      if ((file != null) && file.match(/^ftp:|^https?:|^gs:|^s3:|^data:[^;]*;base64,([a-zA-Z0-9\/+\n=]+)$/)) {
         return [
           params, {
             file: file

После применения этой разницы я успешно получил изображение из Google Cloud Storage

...