6

Ich versuche gapi-laden ein Bild zu verwenden, Cloud-Speicher .Der aktuelle Code ist, ich habe googelnUpload zu Google Cloud Speicher mit json api von Javascript

<script src="https://apis.google.com/js/api.js"></script> 
<script type="text/javascript"> 
var imgData = null; 

function getImage() { 
    navigator.camera.getPicture(onSuccess, onFailure, { 
     destinationType: navigator.camera.DestinationType.FILE_URI, 
     sourceType: navigator.camera.PictureSourceType.PHOTOLIBRARY 
    }); 

    function onSuccess(imageURI) { 
     imgData = encodeImageUri(imageURI); 
     var contentLen = imgData.length; 
     gapi.load('client', start); 
    } 

    function onFailure(message) { 
     alert("Get image failed: " + message); 
    } 
} 

function start() { 
    // 2. Initialize the JavaScript client library. 
    console.log('firing google storage api'); 
    gapi.client.init({ 
     'apiKey': 'XXX-XX' 
    }).then(function() { 
     // 3. Initialize and make the API request. 
     console.log('api initialized'); 
     var request = gapi.client.request({ 
      'path': 'https://www.googleapis.com/upload/storage/v1/b/visionapibucket/o?uploadType=media&name=myObject', 
      'method': 'POST', 
      'headers': { 
       'Content-Type': 'image/jpeg' 
      }, 
      'body': imgData 
     }); 

     try { 
      //Execute the insert object request 
      console.log('executing call'); 
      request.execute(function(resp) { 
       alert(resp); 
      }); 

     } catch (e) { 
      console.log('An error has occurred: ' + e.message); 
     } 
    }).then(function(response) { 
     console.log(response.result); 
    }, function(reason) { 
     console.log('Error: ' + reason.result.error.message); 
    }); 
}; 
</script> 

ich sehen kann, dass der Code die Aussage in Konsole schlagen ist: api initialized

aber ich sehe nicht die gapi.client.requestoder sogar einen Fehler etc Druck genannt wird.

Ich bin nicht sicher, was hier nicht stimmt. Bitte geben Sie

+0

Ich weiß nicht viel über diese 'google api' aber ich kann sagen, eine Sache, dass die * Argumente * für die' gapi.client.request' sind 'path',' method', 'params',' header', 'body' wie hier dokumentiert [ ] (https://developers.google.com/api-client-library/javascript/referenz/referredocs # gapiclientrequestargs), bitte senden Sie Ihre Eingabe, nachdem Sie dies korrigiert haben. –

+0

gut nur Pfad ist erforderlich, alle anderen sind optional – Vik

+0

aber 'content type' ist kein Parameter es sollte als' header {'Inhaltstyp': 'image/jpeg'} 'gesendet werden, bitte senden Sie Ihre Eingaben nach der Korrektur dieser –

Antwort

1

Sie können keine Dateien auf Google-Speicher laden, indem nur API-Schlüssel verwenden. Sie müssen ein OAuth-Token haben.

Wenn die Anforderung eine Autorisierung erfordert (z. B. eine Anforderung für private Daten einer Person), muss die Anwendung ein OAuth 2.0-Token mit der Anforderung bereitstellen. Die Anwendung kann auch den API-Schlüssel bereitstellen, muss dies aber nicht.

Wenn für die Anforderung keine Autorisierung erforderlich ist (z. B. eine Anforderung für öffentliche Daten), muss die Anwendung entweder den API-Schlüssel oder ein OAuth 2.0-Token oder beides bereitstellen.

https://cloud.google.com/storage/docs/json_api/v1/how-tos/authorizing

In Ihrem Fall sollten Sie so laden Sie ein OAuth-Token haben.

Sie haben mehrere Abhilfe:

  • Sie können die Datei auf den Server laden, und laden Sie sie Sie Server-Anmeldeinformationen von Dienstkonto verwenden.
    https://cloud.google.com/compute/docs/access/service-accounts

  • Sie können ein Token auf Ihrem Server erstellen und es an Ihren Client senden. Dann kann der Client eine Datei auf Ihrem Google Storage-Konto hochladen, ohne eine permanente Zugriffstoken

  • Sie können auf die Google Storage-Konto Ihrer Benutzer hochladen. Dazu müssen sie sich in Ihrer App anmelden. https://developers.google.com/identity/protocols/OAuth2

  • Die letzte Methode ist, Sie können die Dateien auf Ihren Server hochladen und in die Cloud kopieren, indem Sie den Befehl gutil mv ausführen. In diesem Fall alles, was Sie tun müssen, ist einmal zu Ihrem Google-Cloud-Konto einzuloggen von gcloud auth mit gustil mv, gcloud mv command

Mehr Info über gcloud Dienstprogramm, und es zum Download: https://cloud.google.com/sdk/

+0

ich stimme zu, was Sie oben gesagt haben, aber meine Frage hier ist, dass selbst der Anruf nicht passiert. Ich sollte einen Authentifizierungsfehler oder einen Berechtigungsfehler sehen. ist es nicht? – Vik

Verwandte Themen