Передача входного HTML-файла в качестве параметра Firebase Cloud Function - PullRequest
0 голосов
/ 04 мая 2018

Я довольно новичок в этой области, и я начал работу с облачной базой firebase 2 дня назад.

Извините, я все еще студент, поэтому я не совсем понимаю некоторые документы.

Я попытался выяснить, как параметр передается из моего клиентского JavaScript в функцию Firebase Cloud.

функция моего облака

exports.OCR = functions.https.onCall((req) => {
  const vision = require('@google-cloud/vision');
  // Creates a client
  const client = new vision.ImageAnnotatorClient();
  console.log(req);
  // Performs label detection on the image file
  client
    .documentTextDetection(req)
    .then((results) => {
      console.log("Entered");
      console.log(req);
      const fullTextAnnotation = results[0].fullTextAnnotation;
      console.log(fullTextAnnotation.text);
      return results[0].fullTextAnnotation.text;
    })
    .catch(err => {
      console.error('ERROR:', err);
      return "error";
    });
})

Я использую облачную функцию Firebase и Google Vision API.

На самом деле я пытался передать параметр следующим образом

Мой клиент на стороне

document.getElementById("fileInput").click();
    var file = document.getElementById("fileInput");
    var fileInput = document.getElementById('fileInput');
    fileInput.addEventListener('change', function (e) {
        var file = e.target.files[0];
        // Do something with the image file.
        var tmppath = URL.createObjectURL(file);
        console.log(file);
        console.log(tmppath);
        //var url = "https://firebasestorage.googleapis.com/v0/b/recette-f3ef5.appspot.com/o/FB1.gif?alt=media&token=28727220-181c-440e-87ae-4808b5c9ba28";
        OCR(file)
        .then(function(result) {
            console.log(result);
        }).catch(function(err) {
            console.log(err);
        });
    });

и это не сработало. Я всегда получаю нулевой возврат, когда запускаю функцию.

Итак, мой вопрос: как я могу передать файл (HTML INPUT TAG) в мою облачную функцию?

p.s: когда я попробовал код с узлом the_code.js, он работает.

1 Ответ

0 голосов
/ 03 июня 2018

Согласно библиотеке Google Cloud Node.js Документация Функция documentTextDetection должна получить объект JS, подобный этому:

var image = {
  source: {imageUri: 'gs://path/to/image.jpg'}
};

vision.documentTextDetection(image).then(response => {
  // doThingsWith(response);
}).catch(err => {
  console.error(err);
});

Функция file, которую вы передаете OCR, вероятно, имеет структуру, отличную от определенной в документации.

Есть несколько вариантов этого:

Если ключ source, значение должно быть другим объектом, содержащим imageUri или filename в качестве ключа и строка в качестве значения.

Если ключ content, значение должно быть Buffer.

Итак, ваш код должен выглядеть примерно так.

    console.log(tmppath);
    //var url = "https://firebasestorage.googleapis.com/v0/b/recette-f3ef5.appspot.com/o/FB1.gif?alt=media&token=28727220-181c-440e-87ae-4808b5c9ba28";
    image = {source: {imageUri: 'https://firebasestorage.googleapis.com/v0/b/recette-f3ef5.appspot.com/o/FB1.gif?alt=media&token=28727220-181c-440e-87ae-4808b5c9ba28'}}
    OCR(image)

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

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