gpt4 book ai didi

angularjs - 为 Azure Blob 存储启用 CORS

转载 作者:行者123 更新时间:2023-12-02 23:00:32 25 4
gpt4 key购买 nike

我对Azure Blob Storage完全陌生,并且在为 Angular 客户端设置CORS时遇到问题。我正在使用这个module 。我在我的 nodejs 服务器上成功生成了 sasToken

我还检查了这些引用文献:Set Blob Service Properties , Cross-Origin Resource Sharing (CORS) Support for the Azure Storage ServicesWindows Azure Storage: Introducing CORS但我真的发现在哪里执行/放置这些代码令人困惑。

到目前为止我所做的是:

在 AGULAR Controller 中:

// this is the service that generate the sasToken from the server
getService.getSasToken(filename)
.then(function (response) {
// response = {
// sasToken : "asa7sya....",
// token: "the shared key",
// account: "the storage account name"
// }

function createCORSRequest(method, url) {
var xhr = new XMLHttpRequest();
if ("withCredentials" in xhr) {
xhr.open(method, url, true);
xhr.setRequestHeader("Content-Type","application/xml");
xhr.setRequestHeader("x-ms-version", "2013-08-15");
xhr.setRequestHeader("Authorization", response.token);
xhr.setRequestHeader("myaccount", response.account);
} else if (typeof XDomainRequest != "undefined") {
xhr = new XDomainRequest();
xhr.open(method, url, true);
xhr.setRequestHeader("Content-Type","application/xml");
xhr.setRequestHeader("x-ms-version", "2013-08-15");
xhr.setRequestHeader("Authorization", response.token);
xhr.setRequestHeader("myaccount", response.account);
} else {
xhr = null;
}
return xhr;
}

var xhr = createCORSRequest('PUT', 'https://foo.blob.core.windows.net?restype=service&comp=properties');
if (!xhr) {
throw new Error('CORS not supported');
}else{
// Response handlers.
xhr.onload = function() {
alert('Response from CORS request to ' + xhr.responseText);
azureBlob.upload({
baseUrl: "https://foo.blob.core.windows.net/bar/"+filename,
sasToken: "?"+response.sasToken,
file: blobFile,
progress: function (progress) {
console.log("progress", progress);
},
complete: function (complete) {
console.log("complete", complete);
},
error: function (error) {
console.log("error", error);
},
// blockSize: // What do I put here?
})
};

xhr.onerror = function() {
alert('Woops, there was an error making the request.');
};
$.ajax({
type: "GET",
url: "../scripts/cors.xml", // local xml file
dataType: "xml",
success: function(xml){
console.log("xml", xml);
xhr.send(xml);
}
});

}
},function (error) {
console.log(error);
})

CORS.XML

    <?xml version="1.0" encoding="utf-8"?>
<StorageServiceProperties>
<Logging>
<Version>1.0</Version>
<Delete>true</Delete>
<Read>false</Read>
<Write>true</Write>
<RetentionPolicy>
<Enabled>true</Enabled>
<Days>7</Days>
</RetentionPolicy>
</Logging>
<HourMetrics>
<Version>1.0</Version>
<Enabled>true</Enabled>
<IncludeAPIs>false</IncludeAPIs>
<RetentionPolicy>
<Enabled>true</Enabled>
<Days>7</Days>
</RetentionPolicy>
</HourMetrics>
<MinuteMetrics>
<Version>1.0</Version>
<Enabled>true</Enabled>
<IncludeAPIs>true</IncludeAPIs>
<RetentionPolicy>
<Enabled>true</Enabled>
<Days>7</Days>
</RetentionPolicy>
</MinuteMetrics>
<Cors>
<CorsRule>
<AllowedOrigins>*</AllowedOrigins>
<AllowedMethods>GET,PUT,POST</AllowedMethods>
<MaxAgeInSeconds>500</MaxAgeInSeconds>
<ExposedHeaders>x-ms-meta-data*,x-ms-meta-customheader</ExposedHeaders>
<AllowedHeaders>x-ms-meta-target*,x-ms-meta-customheader</AllowedHeaders>
</CorsRule>
</Cors>
<DefaultServiceVersion>2013-08-15</DefaultServiceVersion>
</StorageServiceProperties>

上面的代码是基于这个GUIDE

但是我仍然收到此错误:

enter image description here

以前有人这样做过吗?请分享您的代码。

提前致谢。

最佳答案

我可以看到您对预检请求的响应不包含“Access-Control-Allow-origin” header ,该 header 显示您的预检请求失败。这意味着您没有获得服务器端的许可。

您说您的代码基于 Guide 。但指南说 Date 或 x-ms-date 是必需的 请求 header 未出现在您的请求 header 中,导致您的预检请求被拒绝。

我的建议是将 x-ms-date 添加到您的请求 header 中,然后重试。您可以看到this article获取有关“预检请求”和“实际请求”的详细信息。

关于angularjs - 为 Azure Blob 存储启用 CORS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36412231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com