0

Der Antwort in SO question von @ brandon-yarbrough folgend, entschied ich mich für den Upload von Objekten in den Cloud-Speicher mit Signierter URL. Ich erzeugen die signierten URLs durch google-cloud-storage Bibliothek wie folgt:Objekte in Google Cloud Storage hochladen

private static Storage storage = StorageOptions.getDefaultInstance().getService(); 

URL uploadUrl = storage.signUrl(
      BlobInfo.newBuilder(IMAGE_BUCKET, fileName).build(), 
      30, 
      TimeUnit.MINUTES, 
      Storage.SignUrlOption.httpMethod(HttpMethod.PUT)); 

Wenn ich versuche, eine Datei an die generierte URL zu laden, ich den Fehler unten zu bekommen.

<?xml version='1.0' encoding='UTF-8'?> 
<Error> 
    <Code>AccessDenied</Code> 
    <Message>Access denied.</Message> 
    <Details>Anonymous users does not have storage.objects.create access to bucket the-awesomest-bucket.</Details> 
</Error> 

Mein Verständnis von signierter URL war, dass die Nutzer müssen damit nicht authentifiziert werden, und deshalb anonyme Benutzer Daten laden, ohne dass ich keine besonderen Berechtigungen auf dem heißen Stein einstellen müssen. Fehle ich etwas?

+0

Sind Sie sicher, dass Sie alle Abfrageparameter mit Ihrer Upload-Anfrage einschließen? –

+0

Sieht so aus, als ob ich die Abfrage falsch gesendet hätte - anstatt die Anfrage als Abfrageparameter zu senden, habe ich sie in der Kopfzeile gesendet. Jetzt sehe ich "Die von uns berechnete Anforderungssignatur stimmt nicht mit der von Ihnen angegebenen Signatur überein. Überprüfen Sie Ihren Google-Geheimschlüssel und die Signaturmethode. – Raunak

Antwort

0

Parameter 'content-type' ist optional, wenn Sie ihn jedoch nicht definieren, wird standardmäßig 'binary/octet-stream' verwendet. Wenn Sie versuchen, ein Bild mit einem anderen Inhaltstyp hochzuladen, führen Sie eine nicht übereinstimmende Signatur aus.

Verwandte Themen