3

我们有一个 azure blob 存储,启用了日志记录。我可以使用管理门户查看这些日志并下载 blob。但现在我正在尝试使用 Client api 列出这些日志。类似的东西:

let account = new CloudStorageAccount(credentials, true)
let client = account.CreateCloudBlobClient()
let container = client.GetContainerReference "$logs"
container.ListBlobs()

但这会引发网络异常代码400 Bad Request。我可以。但是,在此客户端上列出来自其他容器的 blob。我知道我需要对此容器进行身份验证,但我正在使用主访问密钥作为凭据。那么为什么我不能得到 $logs blob?

谢谢

4

1 回答 1

5

正如我在上面的评论中提到的,您需要使用可以从 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 ),您会发现可以通过将参数指定为 true 来获取 blob 容器中的所有 blob useFlatBlobListing(我在上面的代码中这样做了)。试一试,它会返回你的 blob 容器中所有 blob 的列表。

于 2013-04-17T15:40:04.860 回答