我们有一个azure blob存储,启用了日志记录。 我可以使用管理门户查看这些日志并下载blob。 但现在我正在尝试使用Client api列出这些日志。 一些事情:
let account = new CloudStorageAccount(credentials, true)
let client = account.CreateCloudBlobClient()
let container = client.GetContainerReference "$logs"
container.ListBlobs()
但是这会抛出一个Web异常代码400 Bad Request
。
我可以。但是,列出此客户端上其他容器的blob。
我知道我需要对此容器进行身份验证,但我正在使用主要访问密钥来获取凭据。
那么为什么我不能获得$ logs blob?
由于
答案 0 :(得分:4)
正如我在上面的评论中提到的,您需要使用最新版本的存储客户端库,您可以从Nuget获取:http://nuget.org/packages/WindowsAzure.Storage/。
以下是示例代码:
open Microsoft.WindowsAzure.Storage
open Microsoft.WindowsAzure.Storage.Auth
open Microsoft.WindowsAzure.Storage.Blob
[<EntryPoint>]
let main argv =
let credentials = new StorageCredentials("accountname", "accountkey")
System.Console.WriteLine(credentials.AccountName)
let account = new CloudStorageAccount(credentials, true)
System.Console.WriteLine(account.BlobEndpoint)
let client = account.CreateCloudBlobClient();
let container = client.GetContainerReference "$logs"
System.Console.WriteLine(container.Uri)
let blobs = container.ListBlobs("", true, BlobListingDetails.All, null, null);
for blob in blobs do
System.Console.WriteLine(blob.Uri)
let response = System.Console.ReadLine()
0 // return an integer exit code
以上代码需要Storage Client Library 2.0。
您只返回一个项目的原因是因为您在没有参数的情况下调用ListBlobs
函数。如果你在这里查看这个函数的定义(http://msdn.microsoft.com/en-us/library/windowsazure/microsoft.windowsazure.storage.blob.cloudblobcontainer.listblobs.aspx),你会看到你可以通过将useFlatBlobListing
参数指定为true来获取blob容器中的所有blob(我在上面的代码中做了) )。试一试,它会返回blob容器中所有blob的列表。