Настройка общего доступа к объектам Google Cloud Storage с помощью возобновляемой загрузки подписанных URL-адресов - PullRequest
1 голос
/ 27 октября 2019

Я пытаюсь обновить проект с использованием возобновляемых загрузок, и мне удалось загрузить его в мое ведро с помощью клиентской стороны для обработки всех запросов PUT.

Одна из проблем, с которыми я сталкиваюсь, - это установка ACL насам объект.

Клиентская сторона .

Я попытался установить заголовок на PUT с обоими,

'x-goog-acl':'public-read' и 'acl': 'public-read'

Последний отлично работает на моей не возобновляемой загрузке, но я не на 100% использую ее для возобновляемой илиесли это даже имеет значение.

на стороне сервера

Я использую метод beginSignedUploadSession с облачным хранилищем Google для PHP Library

Я видел такие примеры.

$bucket->upload(
    fopen('/data/file.txt', 'r'),
    [
        'predefinedAcl' => 'publicRead'
    ]
);

Итак, я попробовал ...

$url = $object->beginSignedUploadSession([
        'predefinedAcl' => 'publicRead'
       ]);

Однако, глядя на документы, предопределенный параметр Acl, похоже, недля этого метода.

beginSignedUploadSession Параметры

Единственное, что я могу подумать попробоватьиспользует заголовки напрямую, например ..

 $url = $object->beginSignedUploadSession([
          'headers' => array('x-goog-acl' => 'public-read'),
          'contentType' => $filetype
        ]); 

Хотя это, похоже, также не работает с заголовками 'x-goog-acl' и 'acl'.

Итак, мой вопросКто-нибудь знает, как правильно установить ACL для объекта с помощью метода beginSignedUploadSession или есть ли обходной путь, если это невозможно напрямую?

Спасибо.

Обновление

Пока что единственный способ, которым я смог это сделать, - это отредактировать источник библиотеки.

Я жестко закодировал заголовок в google-cloud-php / Core / src / Upload / SignedUrlUploader.php с ..

'x-goog-acl' => 'public-read'

preview

Это, очевидно, ужасно, но работает дляменя пока.

Я все еще очень заинтересован в правильном пути или в том, почему заголовок не проходит через. Если я узнаю об этом позже, я обновлю этот пост.

Еще раз спасибо.

1 Ответ

0 голосов
/ 13 ноября 2019

Вы можете использовать функцию getResumableUpload в Google apis, есть опция для ACL.

getResumableUpload

$uploader = $bucket->getResumableUploader(
    fopen('/data/file.txt', 'r'),
    [
    'predefinedAcl' => 'publicRead'
    ]
);

Затем загрузить:

try {
    $object = $uploader->upload();
} catch (GoogleException $ex) {
    $resumeUri = $uploader->getResumeUri();
    $object = $uploader->resume($resumeUri);
}


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...