Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将Firebase存储映像与Google Cloud Vision API结合使用?_Javascript_Firebase_Firebase Authentication_Firebase Storage_Google Cloud Vision - Fatal编程技术网

Javascript 如何将Firebase存储映像与Google Cloud Vision API结合使用?

Javascript 如何将Firebase存储映像与Google Cloud Vision API结合使用?,javascript,firebase,firebase-authentication,firebase-storage,google-cloud-vision,Javascript,Firebase,Firebase Authentication,Firebase Storage,Google Cloud Vision,我有一个webapp,其中用户通过Firebase Auth进行匿名身份验证。我将来自用户的图像存储在Firebase存储中,Firebase存储在后台由Google云存储桶支持。当我试图从客户端javascript使用Google Cloud Vision API来获取图像属性时,我得到了一个权限错误 image-annotator::User lacks permission.: Can not open file: gs://MYAPP.appspot.com/photos/IMG_123

我有一个webapp,其中用户通过Firebase Auth进行匿名身份验证。我将来自用户的图像存储在Firebase存储中,Firebase存储在后台由Google云存储桶支持。当我试图从客户端javascript使用Google Cloud Vision API来获取图像属性时,我得到了一个权限错误

image-annotator::User lacks permission.: Can not open file: gs://MYAPP.appspot.com/photos/IMG_12345.jpg
如果我公开形象,一切都会正常。但这是用户数据,不能公开。我怎样才能解决这个问题

调用vision api的代码:

gapi.client.init({
    'apiKey': MY_API_KEY,
    'discoveryDocs': ['https://vision.googleapis.com/$discovery/rest'],
    // clientId and scope are optional if auth is not required.
    'clientId': MY_APP_ID + '.apps.googleusercontent.com',
    'scope': 'profile',
  }).then(function() {
    // 3. Initialize and make the API request.
    return gapi.client.vision.images.annotate({
      "requests":
      [
        {
          "features":
          [
            {
              "type": "LABEL_DETECTION"
            },
            {
              "type": "IMAGE_PROPERTIES"
            }
          ],
          "image":
          {
            "source":
            {
              "gcsImageUri": "gs://MY_APP.appspot.com/photos/" + "IMG_12345.jpg"
            }
          }
        }
      ]
    });
  }).then(function(response) {
    console.log(response.result);
  }, function(reason) {
    console.log('Error: ' + reason.result.error.message);
  });
将图像上载到存储器的我的代码:

var file = e.target.files[0];
var metadata = {
  contentType: file.type
};
console.log(file);

var uploadTask = photosStorageRef.child(file.name).put(file, metadata);

您确实希望通过类似()的方式在服务器端执行此操作


客户端将要求您的API密钥具有访问照片的足够权限,这基本上将使私有照片公开(因为一旦API密钥具有读取它们的权限,如何阻止恶意客户端这样做?)。

有没有办法对照片进行每用户身份验证?当通过firebase存储进行访问时,这是可能的,具体请参见“firebase存储与firebase身份验证无缝集成,以识别用户,并提供声明性安全语言,允许您对单个文件或文件组设置访问控制,以便您可以根据需要将文件设置为公共或私有。”,谢谢我已请求访问云功能alpha。我想现在我在等待?在Firebase land,请参阅:@MikeMcDonald是否可以使用Firebase匹配我捕获的图像。例如,我在Firebase存储中存储了一些图像。现在,我想使用CloudVision API使用一个图像来查找类似的图像