Google cloud platform 谷歌云存储:否';访问控制允许原点';请求的资源上存在标头

Google cloud platform 谷歌云存储:否';访问控制允许原点';请求的资源上存在标头,google-cloud-platform,cors,Google Cloud Platform,Cors,我想上传文件到谷歌云存储。我使用go创建了签名url。使用签名url和axios,我编写了如下代码 const options = { headers: { 'Access-Control-Allow-Origin': '*', }, } this.$axios .put(signed_url, file, options) .then((res) => {

我想上传文件到谷歌云存储。我使用go创建了签名url。使用签名url和axios,我编写了如下代码

      const options = {
        headers: {
          'Access-Control-Allow-Origin': '*',
        },
      }

      this.$axios
        .put(signed_url, file, options)
        .then((res) => {
          console.log(res)
        })
        .catch((err) => {
          console.log(err)
        })
    })
但响应是
访问位于的XMLHttpRequest'https://storage.googleapis.com....“起源”http://localhost:3000'已被CORS策略阻止:请求的资源上不存在'Access Control Allow Origin'标头。
执行axios put后返回。我的背景在这里

❯ gsutil cors get gs://<backet-name>
[{"maxAgeSeconds": 86400, "method": ["*"], "origin": ["*"], "responseHeader": ["*"]}]
❯ gsutil cors get gs://
[{“maxagesonds”:86400,“方法”:[“*”],“来源”:[“*”],“响应头”:[“*”]}]

在这里参加聚会迟到了,但由于这件事让我难堪了好几个小时才把它发出去。我也遇到了同样的问题,通过在客户端和生成签名URL的函数中显式设置方法和内容类型,我解决了这个问题

服务器端代码:

    bucket := "YOUR_BUCKET_NAME_HERE"
    filename := "someuniquefilename-uuid.png"
    method := "PUT"
    expires := time.Now().Add(time.Hour * 2) // allow 2 hours for large uploads
    ctp := "image/png"  // can also pass from client

    url, err := storage.SignedURL(bucket, filename, &storage.SignedURLOptions{
        GoogleAccessID: "YOUR_SERVICE_ACCOUNT_HERE@appspot.gserviceaccount.com",
        PrivateKey:     []byte("-----BEGIN PRIVATE KEY-----\n  get this from your google service account \n-----END PRIVATE KEY-----\n"),
        Method:         method,
        Expires:        expires,
        ContentType:    ctp,
    })
    // get file data
    var file = $('#' + pfx + "File").prop("files")[0];

    $.ajax({
        method: "PUT",
        contentType: file.type, 
        processData: false,
        dataType: "xml",
        crossDomain: true,
        data: file,
        url: sURL,
        // headers: {'Access-Control-Allow-Origin':'*'},
        beforeSend: function (request){
            request.setRequestHeader("Access-Control-Allow-Origin", '*');
        },      
        xhr        : function ()
        {
            var jqXHR = null;
            if ( window.ActiveXObject )
            {
                jqXHR = new window.ActiveXObject( "Microsoft.XMLHTTP" );
            }
            else
            {
                jqXHR = new window.XMLHttpRequest();
            }

            //Upload progress
            jqXHR.upload.addEventListener( "progress", function ( evt )
            {
                if ( evt.lengthComputable )
                {
                    var percentComplete = Math.round( (evt.loaded * 100) / evt.total );
                    //Do something with upload progress
                    $('#' + pfx + "Progress").val(percentComplete); 
                    console.log( 'Uploaded percent', percentComplete );
                }
            }, false );

            return jqXHR;
        },  
        error: function (response, status, e) {
            alert('Oops something went wrong');
        },      
        success: function(data) {
            alert(data);
        },
        complete: function() {
            var a = 1;
        },
    
    });

    return false;
客户端代码:

    bucket := "YOUR_BUCKET_NAME_HERE"
    filename := "someuniquefilename-uuid.png"
    method := "PUT"
    expires := time.Now().Add(time.Hour * 2) // allow 2 hours for large uploads
    ctp := "image/png"  // can also pass from client

    url, err := storage.SignedURL(bucket, filename, &storage.SignedURLOptions{
        GoogleAccessID: "YOUR_SERVICE_ACCOUNT_HERE@appspot.gserviceaccount.com",
        PrivateKey:     []byte("-----BEGIN PRIVATE KEY-----\n  get this from your google service account \n-----END PRIVATE KEY-----\n"),
        Method:         method,
        Expires:        expires,
        ContentType:    ctp,
    })
    // get file data
    var file = $('#' + pfx + "File").prop("files")[0];

    $.ajax({
        method: "PUT",
        contentType: file.type, 
        processData: false,
        dataType: "xml",
        crossDomain: true,
        data: file,
        url: sURL,
        // headers: {'Access-Control-Allow-Origin':'*'},
        beforeSend: function (request){
            request.setRequestHeader("Access-Control-Allow-Origin", '*');
        },      
        xhr        : function ()
        {
            var jqXHR = null;
            if ( window.ActiveXObject )
            {
                jqXHR = new window.ActiveXObject( "Microsoft.XMLHTTP" );
            }
            else
            {
                jqXHR = new window.XMLHttpRequest();
            }

            //Upload progress
            jqXHR.upload.addEventListener( "progress", function ( evt )
            {
                if ( evt.lengthComputable )
                {
                    var percentComplete = Math.round( (evt.loaded * 100) / evt.total );
                    //Do something with upload progress
                    $('#' + pfx + "Progress").val(percentComplete); 
                    console.log( 'Uploaded percent', percentComplete );
                }
            }, false );

            return jqXHR;
        },  
        error: function (response, status, e) {
            alert('Oops something went wrong');
        },      
        success: function(data) {
            alert(data);
        },
        complete: function() {
            var a = 1;
        },
    
    });

    return false;
(并确保您的CORS设置在您的google存储桶上)