Ошибка CORS при загрузке файла изображения в облако Google с использованием подписанного URL

Я получаю ошибку CORS при загрузке файла изображения в облако Google с локального хоста с использованием подписанного URL-адреса, как этого избежать?

Код для создания signedUrl:

    function get_v4_signed_url($bucket, $keyname, $contentType){

        $bucket = $this->storageClient->bucket($bucket);
        $object = $bucket->object($keyname);
        $url = $object->signedUrl(
            # This URL is valid for 15 minutes
            new \DateTime('120 min'),
            [
                'method' => 'PUT',
                'contentType' => $contentType,
                'version' => 'v4',
                "Access-Control-Allow-Origin" => "*"
            ]
        );
        return $url;
    }

CORS из ведра:

gsutil cors get gs://bucket-name
[{"maxAgeSeconds": 3600, "method": ["GET", "POST", "PUT", "DELETE", "OPTIONS"], "origin": ["https://localhost:8443"], "responseHeader": ["goog-resumable", "Content-Type", "Authorization", "Content-Length", "User-Agent", "x-goog-resumable"]}]

Код Javascript:

uploadFileToGcp(file, url) {

var xhr  = new XMLHttpRequest();
xhr.open('PUT', url);
xhr.setRequestHeader('Content-Type', file.type);
xhr.setRequestHeader("Access-Control-Allow-Origin","*");
xhr.onload = function () {
var res = JSON.parse(xhr.responseText);
console.log("res: "+res);
if (xhr.status == "200") {
hideLoadingDiv()
console.table(res);
} else {
console.error(res);
}
}
xhr.send(file);

}

Ответ от Google Cloud:

Access to XMLHttpRequest at 'signed_URL' from origin 'https://localhost:8443' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

person shreyanshu agarwal    schedule 19.11.2019    source источник
comment
как вы генерируете подписанный URL?   -  person Amit Naik    schedule 19.11.2019
comment
Вы настроили CORS на своем ведре? Если нет, см. здесь.   -  person FallenWarrior    schedule 19.11.2019
comment
Какова точная формулировка / характер ошибки?   -  person Kolban    schedule 19.11.2019
comment
Привет! Просмотрите раздел Как задать вопрос и отредактируйте свой вопрос. Было бы неплохо иметь точное сообщение об ошибке, которое вы получаете, и шаги, которые вы сделали, чтобы добраться до него, чтобы кто-то мог воспроизвести его и предоставить возможное решение.   -  person siamsot    schedule 19.11.2019
comment
@AmitNaik Я добавил код, с помощью которого я генерирую signedUrl   -  person shreyanshu agarwal    schedule 19.11.2019
comment
@FallenWarrior да, у меня есть.   -  person shreyanshu agarwal    schedule 19.11.2019
comment
@Kolban Я добавил ответ, полученный с сервера Google.   -  person shreyanshu agarwal    schedule 19.11.2019
comment
Я думаю, проблема в том, что вы используете https в своем источнике вместе с определенным портом. Это может вызвать некоторые проблемы при сравнении источников. Вы можете попробовать использовать простой http вместе с конкретным портом, чтобы проверить это и поделиться результатом.   -  person rsalinas    schedule 19.11.2019


Ответы (1)


Я изменил файл cors:

[{"maxAgeSeconds": 3600, "method": ["GET", "HEAD", "DELETE", "PUT", "POST"], "origin": ["https://localhost:8443"], "responseHeader": ["Content-Type", "access-control-allow-origin"]}]

и это сработало

person shreyanshu agarwal    schedule 19.11.2019