将Access-Control-Allow-Origin标头添加到使用PHP客户端库上载的文件

时间:2016-10-12 09:58:55

标签: google-cloud-storage

我使用Google Cloud Platform PHP客户端库(https://github.com/google/google-api-php-client)将文件上传到项目中的存储桶。我需要能够使用来自其他域的AJAX请求来获取文件,因此需要添加标题

<div style="height:600px;overflow-y:scroll">
    <table>
    ...
    </table>
</div>

我正在试图解决这个问题 - 我的谷歌搜索毫无结果。代码示例供参考:

Access-Control-Allow-Origin: *

文件已正确上传,可以在存储桶中查看,但没有正确的标题,因为我不知道如何添加它们。事实上,我甚至无法使用Cloud Platform Console手动添加这些标头。任何指针都赞赏,谢谢

2 个答案:

答案 0 :(得分:6)

所以我终于找到了我需要的文档,它只能为存储桶本身设置CORS配置(它在文件级别是不可配置的)。使用gsutil或XML API执行此操作的说明为here

我用内容创建了一个cors-json-file.json:

[
    {
      "origin": ["*"],
      "method": ["*"]
    }
]

然后跑

gsutil cors set cors-json-file.json gs://my_bucket

可以使用

查看存储桶的现有CORS配置
gsutil cors get gs://my_bucket

可在Google Bucket API Reference

找到完整的配置选项列表

是否存在缓存问题我不确定,但这似乎仅适用于在进行CORS配置更改后添加到存储桶的文件,但是我很高兴能够纠正了

答案 1 :(得分:1)

您还可以使用StorageClient中的google-cloud-php为PHP配置CORS。

$storage = new StorageClient([
    'projectId' => '<project-id>',
    'keyFilePath' => '<path-to-key-file>',
]);

$cors = [
    [
        'maxAgeSeconds' => '3600',
        'method' => ['*'],
        'origin' => ['*'],
        'responseHeader' => ['Content-Type'],
    ],
]

// Creating a bucket with CORS
$storage->createBucket('<bucket-name>', [
    'location' => 'EU',
    'cors' => $cors,
]);

// Updating a bucket
$storage->bucket('<bucket-name>')->update([
    'cors' => $cors,
]);