我使用以下 Java 代碼將物件添加到具有公共讀取訪問權限的谷歌云存盤,以便任何人都可以讀取該檔案:
try {
gcsService.createOrReplace(file, new GcsFileOptions.Builder()
.mimeType("image/jpeg")
.acl("public-read").build(),
ByteBuffer.wrap(data));
} catch (IOException ex){
// catch error
}
但是當我在 GCP 控制臺中訪問云存盤時,如果我嘗試編輯檔案的權限,我會收到此通知以及此錯誤:
由于您無權了解該物件的公共訪問狀態,因此顯示的公共 URL 可能無效。

當我將檔案寫入云存盤時,我可以做些什么,這樣它既具有公共讀取權限,又允許我,專案所有者,有權編輯它的權限?
當我是專案所有者時,我無法編輯自己物件的權限似乎有點愚蠢。
編輯:
I was also considering using the new cloud storage api. Here is the code I have so far. How can I make the ACL be for the project owner (me) as well as have it be publicly readable?
Storage storage = StorageOptions.getDefaultInstance().getService();
BlobId blobId = BlobId.of(bucket, object);
BlobInfo blobInfo = BlobInfo.newBuilder(blobId)
.setContentType(mimeType)
.setAcl(Arrays.asList(Acl.of(Acl.User.ofAllUsers(), READER)))
.build();
Blob output = storage.create(blobInfo, data);
uj5u.com熱心網友回復:
storage.buckets.getIamPolicy用于讀取存盤桶 IAM 策略,用于storage.buckets.setIamPolicy更新存盤桶 IAM 策略。
storage.objects.getIamPolicy 和 storage.objects.setIamPolicy 權限不適用于啟用了統一存盤桶級別訪問的存盤桶。因此,當您對存盤桶啟用統一的存盤桶級別訪問權限時,訪問控制串列 (ACL) 將被禁用,并且只有存盤桶級別的身份和訪問管理 (IAM) 權限授予對該存盤桶及其包含的物件的訪問權限。因此,首先檢查您在使用各種選項創建存盤桶時是否為存盤桶啟用了統一的存盤桶級別訪問/細粒度權限以查看存盤桶元資料(XML API 除外)
對 GCS 資源的訪問不是遞回的。擁有專案或該專案中的存盤桶并不一定意味著您也對特定物件具有某些權限。擁有存盤桶確實意味著您可以列出或洗掉該物件,但僅此而已。確定哪些內置 IAM 角色可以執行哪些操作的最佳資源是 Google Cloud Platform IAM Permissions Reference。在該頁面上,按 CTRL-F 獲取您感興趣的其他權限,您將在右側欄中看到授予該權限的角色。請注意,專案所有者(角色/所有者)不在授予此權限的角色串列中。
關于如何使單個物件公開可讀,請閱讀檔案中的這個 Java 代碼示例。同樣,如果您的存盤桶使用統一的存盤桶級別訪問權限,則不能使用這些步驟。相反,向存盤桶中的所有物件授予公共可讀性,或使用簽名 URL。也許這就是您收到錯誤的原因,因為您對存盤桶具有統一的存盤桶級別訪問權限,并且您正在嘗試不可能的事情。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/433883.html
標籤:google-app-engine google-cloud-platform google-cloud-storage
