【发布时间】:2019-10-25 22:15:45
【问题描述】:
我正在尝试在 Google Cloud Storage 上的存储桶中获取对象。 为此,我在其 API 页面上使用 Google 推荐的代码:
https://cloud.google.com/storage/docs/downloading-objects#storage-download-object-php
但是当我这样做时,我得到了一个权限被拒绝的错误。
我为 Composer 配置了权限(例如,我列出存储桶中对象的代码工作正常)但我无法下载任何内容。我收到此错误:
警告:fopen(C:\wamp64\www\test):无法打开流:第 602 行 C:\wamp64\www\test\vendor\google\cloud-storage\src\StorageObject.php 中的权限被拒绝
我在 Cloud Storage 控制台中为自己授予了所有权限,但错误仍然出现。
我也想知道,是否可以在不下载的情况下获取/复制对象的内容?
感谢您的帮助!
编辑:代码很简单:
$storage = new StorageClient($config = [
'keyFilePath' => "[PATH OF MY KEYFILE]",
'projectId' => $projectId
]);
$bucket = $storage->bucket($bucketName);
$object = $bucket->object($objectName);
$object->downloadToFile($destination);
printf('Downloaded gs://%s/%s to %s' . PHP_EOL,
$bucketName, $objectName, basename($destination));
}
在存储中,我只有带有对象列表的存储桶,我需要获取其中一个内容/dl 以将其与另一个 Json 合并
【问题讨论】:
-
了解更多用于访问数据的逻辑的设计/实现可能会很有用。另外,请查看 Stackdriver 日志记录。这是所有 GCP 日志条目所在的位置,这可能有助于了解错误的性质。
-
我编辑了我的问题!我会检查我的 GCP 日志条目
-
Stackdriver中没有错误条目,不代表拒绝权限。或者我不知道去哪里看
-
查看文档,我猜在 downloadToFile 调用中出现错误?我看到它在存储文件的本地文件系统上采用本地路径。在你的故事中,$destination 的价值是多少?你有写权限吗?
-
确实是 downloadToFile 调用失败了!目标是我本地系统中的本地文件夹。我希望这段代码能够创建文件并填充它,实际上我只需要读取对象的内容即可将其附加到另一个(已经创建的)文件中。我应该怎么做才能允许写入文件?我应该创建文件并期望此代码填充它吗?
标签: php download google-cloud-storage