2016-10-12 2 views
0

Я использую библиотеку клиентской платформы Google Cloud Platform (https://github.com/google/google-api-php-client) для загрузки файлов в ведро моего проекта. Мне нужно, чтобы быть в состоянии захватить файл, используя запрос AJAX из другого домена, поэтому поэтому нужно добавить заголовокДобавление заголовка Access-Control-Allow-Origin в файл, загруженный с помощью клиентской библиотеки PHP

Access-Control-Allow-Origin: * 

Я потянув меня за волосы, пытаясь понять это - мои поиски Google бесплодны. Пример кода для справки:

$client = new Google_Client(); 
$client->setApplicationName("Test"); 
$client->useApplicationDefaultCredentials(); 

$client->addScope('https://www.googleapis.com/auth/cloud-platform'); 

$storage = new Google_Service_Storage($client); 
$file_name = "test.txt"; 
$file_content = "this is a test"; 

$postbody = array( 
    'name' => $file_name, 
    'data' => $file_content, 
    'uploadType' => "media", 
    'predefinedAcl' => 'publicRead' 
    ); 

$gsso = new Google_Service_Storage_StorageObject(); 
$gsso->setName($file_name); 

$result = $storage->objects->insert("my_bucket", $gsso, $postbody); 

Файл правильно загружен и может быть просмотрен в ведре, но не правильные заголовки, как я не знаю, как добавить их. На самом деле, я даже не могу найти способ добавления этих заголовков вручную с помощью консоли Cloud Platform. Любые указатели оценили, спасибо

ответ

1

Итак, я, наконец, нашел нужную мне документацию, можно установить конфигурацию CORS для самого ведра (она не настраивается на уровне файла). Инструкции, чтобы сделать это, используя либо GSUtil или в XML API являются here

Я создал Корс-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, однако я m Справайтесь исправить это

0

Вы также можете настроить CORS с помощью PHP, используя StorageClient в google-cloud-php.

$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, 
]);