Google app engine 无法将gs://文件公开,以便直接从Google存储提供服务
我想能够直接从谷歌存储服务图像文件。我正在跟踪,但仍有Google app engine 无法将gs://文件公开,以便直接从Google存储提供服务,google-app-engine,google-cloud-platform,google-cloud-storage,Google App Engine,Google Cloud Platform,Google Cloud Storage,我想能够直接从谷歌存储服务图像文件。我正在跟踪,但仍有访问被拒绝和匿名调用方没有storage.objects.get Access。我在我的Google应用程序引擎项目中运行此功能: require_once 'vendor/autoload.php'; use Google\Cloud\Storage\StorageClient; use google\appengine\api\cloud_storage\CloudStorageTools; $storage = new Storag
访问被拒绝
和匿名调用方没有storage.objects.get Access
。我在我的Google应用程序引擎项目中运行此功能:
require_once 'vendor/autoload.php';
use Google\Cloud\Storage\StorageClient;
use google\appengine\api\cloud_storage\CloudStorageTools;
$storage = new StorageClient();
$storage->registerStreamWrapper();
$text = "Contained text: ".date("Y-m-d H:i:s")."\n";
$options = ['gs' => ['acl' => 'public-read']];
$context = stream_context_create($options);
$filepath = "gs://$project.appspot.com/public_file.txt";
file_put_contents($filepath, $text, 0, $context);
$publicurl = CloudStorageTools::getPublicUrl($filepath, false);
该文件正在成功写入Google存储。我已经通过云控制台中的存储浏览器查看了它
但是当我试图浏览到它时,我得到了访问被拒绝的消息。我错过了什么
我不知道为什么上面的代码无法将权限设置为public,但这里有一个解决方法
如果您使用的是完全公开的bucket,那么您可以做的是将bucket上的默认ACL设置为public read
,那么无论何时在该bucket中创建文件,它们都将是公开的
下面是我从中获得命令的地方:
gsutil defacl set public read gs://[YOUR-PROJECT-ID]
我假设您从公共URL访问对象时出错。乍一看,这可能是由于对象的可见性未正确设置为公共。您能指定您正在使用的代码示例的链接吗?因此,也许我能够重现这个问题。@Maxim这是谷歌代码示例:Kenny,使用gsutil
确定为您的文件设置了哪些权限。更改以下命令以匹配bucket和对象路径:gsutil acl get gs://mybucket/myobject
。要使此对象公开,需要在acl策略中指定读取者。我有一种感觉,allUsers
已经设置好了,但另一个bucket acl正在覆盖它。策略将包含以下内容:{|“bindings”:[{“members”:[“alluser”],“role”:“roles/storage.legacyBucketReader”}下面是我给出的StackOverflow答案,用于解释对象为何为公共对象。这可能有助于您了解对象为何为非公共对象:通过运行您提供的代码,我在上载文件并将其公开方面没有任何问题。尽管如此,我还是通过从ACL中删除allUsers
条目来重现此问题。正如John说,问题是该文件在ACL中没有设置allUsers:R
条目,因此不允许公众访问该文件。运行以下命令修改该文件的ACL:gsutil ACL ch-u allUsers:R gs://project.appspot.com/public_file.txt
是否对您上载的每个文件都会发生这种情况?
$ gsutil acl get gs://my-app-project.appspot.com/public_file.txt
[
{
"entity": "project-owners-XXXXXXXXXXXX",
"projectTeam": {
"projectNumber": "XXXXXXXXXXXX",
"team": "owners"
},
"role": "OWNER"
},
{
"entity": "project-editors-XXXXXXXXXXXX",
"projectTeam": {
"projectNumber": "XXXXXXXXXXXX",
"team": "editors"
},
"role": "OWNER"
},
{
"entity": "project-viewers-XXXXXXXXXXXX",
"projectTeam": {
"projectNumber": "XXXXXXXXXXXX",
"team": "viewers"
},
"role": "READER"
},
{
"email": "my-app-project@appspot.gserviceaccount.com",
"entity": "user-my-app-project@appspot.gserviceaccount.com",
"role": "OWNER"
}
]