![](/img/trans.png)
[英]Cloud Storage - No 'Access-Control-Allow-Origin' header is present on the requested resource for AngularJS view
[英]Google Cloud Storage: No 'Access-Control-Allow-Origin' header is present on the requested resource
我想將文件上傳到 Google Cloud Storage。 我使用 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)
})
})
但響應是Access to XMLHttpRequest at 'https://storage.googleapis.com....' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
執行 axios put 后返回。 我的 backet cors 設置在這里。
❯ gsutil cors get gs://<backet-name>
[{"maxAgeSeconds": 86400, "method": ["*"], "origin": ["*"], "responseHeader": ["*"]}]
來晚了,但是把這個貼出來讓我難住了好幾個小時。 我遇到了同樣的問題,我通過在客戶端和生成簽名 URL 的 function 中顯式設置方法和內容類型來解決它。
服務器端代碼:
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 Cloud Storage。 我使用 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)
})
})
但響應是Access to XMLHttpRequest at 'https://storage.googleapis.com....' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
執行 axios 放后返回。 我的 backet cors 設置在這里。
❯ gsutil cors get gs://<backet-name>
[{"maxAgeSeconds": 86400, "method": ["*"], "origin": ["*"], "responseHeader": ["*"]}]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.