使用SAS的Azure Blob Rest API

时间:2016-01-11 14:38:35

标签: azure azure-storage azure-storage-blobs

我尝试使用Azure存储Rest API和Ajax直接从Web浏览器上传文件(实际上我正在使用Angular的$ http) 我没有成功地遵循所有可能的官方和自定义指南。

首先,我的CORS设置如下:

<script type="text/javascript">
    $(function() {
        $('#myForm').submit(function(e) {
            e.preventDefault(); // stop form submission
            $.ajax({
                type: "POST",
                url: "send-contact2.php",
                data: $(this).serialize(),
                cache: false,
                success: function (data) {
                    alert(data);
                }
            });
        }
    });
</script>

在UI级别,我调用自己的API,返回SAS URL,如下所示:

var storageAccount = CloudStorageAccount.Parse(StorageConnectionString);
        var blobClient = storageAccount.CreateCloudBlobClient();
        var blobServiceProperties = blobClient.GetServiceProperties();

        blobServiceProperties.Cors = new CorsProperties();
        blobServiceProperties.Cors.CorsRules.Add(new CorsRule()
        {
            AllowedHeaders = new List<string>() { "*" },
            AllowedMethods = CorsHttpMethods.Put | CorsHttpMethods.Get | CorsHttpMethods.Head | CorsHttpMethods.Post,
            AllowedOrigins = new List<string>() { "*" },
            ExposedHeaders = new List<string>() { "*" },
            MaxAgeInSeconds = 1800 // 30 minutes
        });

        blobClient.SetServiceProperties(blobServiceProperties);

然后我使用此Angular模块上传blob:https://github.com/kinstephen/angular-azure-blob-upload

到目前为止一切顺利,但是当我尝试上传时,我会从OPTIONS请求中获取此信息(来自Chrome的“网络”标签):

  

403服务器无法验证请求。确保价值   正确形成授权标头,包括签名。

这来自控制台:

  

XMLHttpRequest无法加载'myAzureHttpLink / fotosrestaurantes / google.jpg?sv = 2015-04-05&amp; sr = b&amp; si = enviarFoto&amp; sig = ***&amp; se = 2016-01-11T14%3A16%3A22Z&amp; SP = W&安培;可比=块&安培;块标识= YmxvY2stMDAwMDAw   对预检请求的响应未通过访问控制检查:否   请求中存在“Access-Control-Allow-Origin”标头   资源。因此不允许来源“http://localhost:34090”   访问。响应的HTTP状态代码为403。

现在,据我所知,从官方文档中可以理解(大部分内容都非常简洁,并且有很多链接几乎从不覆盖你真正需要的内容)如果我选择使用SAS URL我不需要授权标题。正如高拉夫在这里所说:https://stackoverflow.com/a/33846704/3198372

我尝试了所有东西,从容器SAS到blob SAS,但没有任何作用。好像CORS配置和SAS URL不起作用(即使它们在那里)。

任何人都知道我哪里错了?

0 个答案:

没有答案