正在尝试使用 Superbalist/flysystem-google-cloud-storage 上传到 Google 云存储
Trying to upload to Google cloud storage using Superbalist/flysystem-google-cloud-storage
更新:使用此 PR 中的代码修复了它,我已要求协助合并 PR,但现在我的问题已通过分叉解决。
正在尝试通过以下包上传到 Google 云存储:
https://github.com/Superbalist/flysystem-google-cloud-storage#usage
我的集成在细粒度访问控制下运行良好,但我需要使用统一访问,并且任何时候我将其设置为统一而不是细粒度时,我都无法再上传到存储桶,并且出现以下错误:
{
"error": {
"code": 400,
"message": "Cannot insert legacy ACL for an object when uniform bucket-level access is enabled. Read more at https://cloud.google.com/storage/docs/uniform-bucket-level-access.",
"errors": [
{
"message": "Cannot insert legacy ACL for an object when uniform bucket-level access is enabled. Read more at https://cloud.google.com/storage/docs/uniform-bucket-level-access.",
"domain": "global",
"reason": "invalid"
}
]
}
}
任何想法我可能缺少什么才能让它工作?
这看起来像 known issue 包 Superbalist/laravel-google-cloud-storage
使用这个包的唯一方法是使用细粒度的访问控制,或者直接使用官方 google cloud storage PHP library.
有一个开放的 PR 可以解决这个问题 [Allow uniform access rules on upload]。
但是,在接受此 PR 之前,我曾针对此问题提出 work-around,而不是使用提到的 PR 更改和 [=17 中的匿名 class 来更新包文件本身=] 7
public function resolveAdapter ($storageClient, $bucket)
{
return new class ($storageClient, $bucket) extends GoogleStorageAdapter {
protected function getOptionsFromConfig(\League\Flysystem\Config $config)
{
$options = [];
if (empty($this->bucket->info()['iamConfiguration']['uniformBucketLevelAccess']['enabled'])) {
if ($visibility = $config->get('visibility')) {
$options['predefinedAcl'] = $this->getPredefinedAclForVisibility($visibility);
} else {
$options['predefinedAcl'] = $this->getPredefinedAclForVisibility(AdapterInterface::VISIBILITY_PRIVATE);
}
}
if ($metadata = $config->get('metadata')) {
$options['metadata'] = $metadata;
}
return $options;
}
};
}
更新:使用此 PR 中的代码修复了它,我已要求协助合并 PR,但现在我的问题已通过分叉解决。
正在尝试通过以下包上传到 Google 云存储:
https://github.com/Superbalist/flysystem-google-cloud-storage#usage
我的集成在细粒度访问控制下运行良好,但我需要使用统一访问,并且任何时候我将其设置为统一而不是细粒度时,我都无法再上传到存储桶,并且出现以下错误:
{
"error": {
"code": 400,
"message": "Cannot insert legacy ACL for an object when uniform bucket-level access is enabled. Read more at https://cloud.google.com/storage/docs/uniform-bucket-level-access.",
"errors": [
{
"message": "Cannot insert legacy ACL for an object when uniform bucket-level access is enabled. Read more at https://cloud.google.com/storage/docs/uniform-bucket-level-access.",
"domain": "global",
"reason": "invalid"
}
]
}
}
任何想法我可能缺少什么才能让它工作?
这看起来像 known issue 包 Superbalist/laravel-google-cloud-storage
使用这个包的唯一方法是使用细粒度的访问控制,或者直接使用官方 google cloud storage PHP library.
有一个开放的 PR 可以解决这个问题 [Allow uniform access rules on upload]。
但是,在接受此 PR 之前,我曾针对此问题提出 work-around,而不是使用提到的 PR 更改和 [=17 中的匿名 class 来更新包文件本身=] 7
public function resolveAdapter ($storageClient, $bucket)
{
return new class ($storageClient, $bucket) extends GoogleStorageAdapter {
protected function getOptionsFromConfig(\League\Flysystem\Config $config)
{
$options = [];
if (empty($this->bucket->info()['iamConfiguration']['uniformBucketLevelAccess']['enabled'])) {
if ($visibility = $config->get('visibility')) {
$options['predefinedAcl'] = $this->getPredefinedAclForVisibility($visibility);
} else {
$options['predefinedAcl'] = $this->getPredefinedAclForVisibility(AdapterInterface::VISIBILITY_PRIVATE);
}
}
if ($metadata = $config->get('metadata')) {
$options['metadata'] = $metadata;
}
return $options;
}
};
}