Загрузка буфера размещенного изображения формы в облачное хранилище с функциями Firebase - PullRequest
0 голосов
/ 25 июня 2018

Вот моя облачная функция. Предполагается получить http-изображение и загрузить его в хранилище, возвращая URL.

exports.uploadImageToEditor = functions.https.onRequest((req, res) => {
        const img = JSON.parse(JSON.stringify(req.body));
        const bucket = admin.storage().bucket();

        return bucket.file('blog/foo.jpg').save(img.data, { 
          resumable: false, 
          metadata: { 
            contentType: 'image/jpeg' 
          } 
        })
          .then(() => {
              return cors(req, res, () => {
                  res.status(200).send({ "url": bucket.file('foo.jpg').getSignedUrl()});
                });
            });
    });

Вот как на самом деле изображение отправляется на клиенте:

uploadImage(file, endPoint) {
        if (!endPoint) {
            throw new Error('Image Endpoint isn`t provided or invalid');
        }
        const                  formData = new FormData();
        if (file) {
            formData.append('file', file);
            const                  req = new HttpRequest('POST', endPoint, formData, {
                reportProgress: true
            });
            return this._http.request(req);
        }
        else {
            throw new Error('Invalid Image');
        }
    }

Ответы [ 2 ]

0 голосов
/ 06 мая 2019

Если вы получаете ошибку разрешения , перейдите в Правила хранения Firebase и добавьте это правило, чтобы разрешить запись в каталог:

service firebase.storage {
  match /b/{bucket}/o {
    match /blog/{anyPath=**} {
      allow read;
      allow write;
    }
  }
}
0 голосов
/ 25 июня 2018

Я думаю, вы, вероятно, ищете метод save () для File в Admin SDK.

const bucket = admin.storage().bucket()
  .file('my-file.jpg').save(blob)
  .then(() => { /* ... */ });
...