创建BlobServiceWithSas时未提供'Access-Control-Allow-Origin'标头。

6 浏览
0 Comments

创建BlobServiceWithSas时未提供'Access-Control-Allow-Origin'标头。

这是我第一次使用Azure Storage JS API。我按照这个Microsoft教程的指示进行操作。\n我在节点服务器上成功生成了SAS密钥,但仍然遇到了身份验证失败的错误。我正在使用Microsoft Azure提供的库。请问我该如何解决这个问题?\n

function test() {
        Restangular.all('cdn/sas').post({container: 'photos'}).then(function (sas) {
                var blobUri = 'https://hamsar.blob.core.windows.net';
                var blobService = AzureStorage.createBlobServiceWithSas(blobUri, sas.token);
                blobService.listContainersSegmented(null, function (error, results) {
                    if (error) {
                        // 处理容器列表错误
                    } else {
                        // 处理容器对象
                    }
                });
            }, function (error) {
                console.log("生成SAS时出错:", error);
            });
    }

\n错误信息:\n\"enter\n\"enter\n\"enter

0
0 Comments

根据错误信息,我发现您创建了一个服务SAS令牌。但是如果您想列出存储账户中的所有容器名称,您需要使用账户SAS令牌。

请注意,您也可以使用blobService.listBlobsSegmented方法,但是您需要确保您的服务SAS令牌具有列出blob文件和设置容器名称的权限。

代码如下:

blobService.listBlobsSegmented('mycontainer', null, function (error, results) 

如果您想列出所有容器,我建议您按照这些代码生成账户SAS令牌。

代码如下:

 var getPolicyWithFullPermissions = function(){
  var startDate = new Date();
  var expiryDate = new Date();
  startDate.setTime(startDate.getTime() - 1000);
  expiryDate.setTime(expiryDate.getTime() + 24*60*60*1000);
  var sharedAccessPolicy = {
    AccessPolicy: {
      Services: AccountSasConstants.Services.BLOB + 
                AccountSasConstants.Services.FILE + 
                AccountSasConstants.Services.QUEUE + 
                AccountSasConstants.Services.TABLE,
      ResourceTypes: AccountSasConstants.Resources.SERVICE + 
                     AccountSasConstants.Resources.CONTAINER +
                     AccountSasConstants.Resources.OBJECT,
      Permissions: AccountSasConstants.Permissions.READ + 
                   AccountSasConstants.Permissions.ADD +
                   AccountSasConstants.Permissions.CREATE +
                   AccountSasConstants.Permissions.UPDATE +
                   AccountSasConstants.Permissions.PROCESS +
                   AccountSasConstants.Permissions.WRITE +
                   AccountSasConstants.Permissions.DELETE +
                   AccountSasConstants.Permissions.LIST,
      Protocols: AccountSasConstants.Protocols.HTTPSORHTTP,
      Start: startDate,
      Expiry: expiryDate
    }
  };
  return sharedAccessPolicy;
};
              var sharedAccessSignature = azure.generateAccountSharedAccessSignature(environmentAzureStorageAccount, environmentAzureStorageAccessKey, getPolicyWithFullPermissions );

然后,您可以使用账户SAS令牌来列出账户的容器。

结果如下:

enter image description here

关于服务SAS和账户SAS之间的区别的更多细节,您可以参考这篇文章。

article

0