2016-05-19 5 views
2

Ich versuche eine signierte URL für ein öffentliches Image zu erstellen
Ist es möglich, die Berechtigungsstufe für die URL festzulegen, oder muss ich sie nach dem Hochladen der Datei festlegen?Google Storage signierte URL öffentlich lesen

Ich habe versucht, es zu tun, indem Sie einige Überschriften übergeben, aber ich bin nicht sicher auf der richtigen Weise, es zu tun.

opts := &storage.SignedURLOptions{ 
    GoogleAccessID: googleAccessID, 
    PrivateKey:  data, 
    Method:   "PUT", 
    Expires:  time.Now().Add(time.Hour * 1), 
    ContentType: r.MimeType, 
    Headers:  []string{"x-goog-acl"}, 
or maybe Headers:  []string{"x-goog-acl:public-read"}, 

} 

Dann muss der Client auch die Kopfzeile setzen?

Antwort

2

Wer eine signierte URL verwendet, handelt mit den Berechtigungen der Entität, die die URL signiert hat. Angenommen, Sie erstellen das Dienstkonto A und verwenden den privaten Schlüssel von A zum Signieren der URL. Wenn ein Endbenutzer versucht, eine Ressource unter Verwendung dieser URL abzurufen, prüft GCS, ob das Dienstkonto A Lesezugriff hat.

0

Sie können es tun, wenn Sie einen neuen Bucket-Writer erstellen. Sie können die Header festlegen und eine ACLRule erstellen. Ich tue dies in einer Anwendung, die ich auf Google App Engine hostet, mit dem Paket "google.golang.org/cloud/storage". Hoffe das hilft.

wc := bucket.Object(filename).NewWriter(ctx) 
wc.ContentType = contentType 
wc.CacheControl = "public, max-age=86400" 
wc.ObjectAttrs.ACL = append(wc.ObjectAttrs.ACL, storage.ACLRule{Role: storage.RoleReader, Entity: storage.AllUsers}) 
+0

Dies ist, nachdem die Datei in den Bucket hochgeladen wurde, Nicht zum Zeitpunkt der signierten URL-Erstellung? – MIkCode

+0

Dieses Beispiel zeigt, wie Sie die Berechtigungen beim Speichern der Datei festlegen. Wenn Sie die Berechtigungen nach dem Speichern aktualisieren müssen, verwenden Sie func (o * ObjectHandle) Update (ctx context.Context, attrs ObjectAttrs), um ihm neue Berechtigungen zu geben. Basierend auf Ihrer Frage hatte ich den Eindruck, dass die Datei bereits öffentlich war. Eine signierte URL wäre daher nicht erforderlich, da dies für eingeschränkte Dateien gilt, die Sie vorübergehend freigeben möchten. – Sean