2016-05-19 2 views
2

Я пытаюсь создать подписанный URL для общедоступного изображения
Возможно ли установить уровень разрешений на URL-адрес или установить его после загрузки файла?google storage signed url public read

Я попытался сделать это, передав некоторые заголовки, но я не уверен, как правильно это сделать.

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"}, 

} 

Тогда клиенту также необходимо установить заголовок?

ответ

2

Тот, кто использует подписанный URL-адрес, действует с разрешениями сущности, которая подписала URL-адрес. Предположим, что вы создали учетную запись службы A и используете закрытый ключ A для подписи URL. Когда конечный пользователь пытается извлечь ресурс с использованием этого URL-адреса, GCS проверит, имеет ли учетная запись службы A доступ к чтению.

0

Вы можете сделать это, создав новую запись в ковше. Вы можете установить заголовки и создать ACLRule. Я делаю это в приложении, которое я размещаю в Google App Engine, используя пакет google.golang.org/cloud/storage. Надеюсь это поможет.

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

это после того, как файл загружен в ведро, Не во время создания подписанного URL-адреса? – MIkCode

+0

В этом примере показано, как установить разрешения при сохранении файла. Если вам необходимо обновить разрешения после сохранения, вы будете использовать func (o * ObjectHandle) Update (ctx context.Context, attrs ObjectAttrs), чтобы предоставить ему новые разрешения. Основываясь на вашем вопросе, я был под впечатлением того, что файл уже был открыт, поэтому подписанный URL-адрес не понадобится, так как это ограниченный файл, который вы хотите разделить временно. – Sean

Смежные вопросы