无法从CloudBlockBlob向CloudBlob进行上传

时间:2013-04-07 00:44:26

标签: azure f# azure-storage

我必须在这里遗漏一些明显的东西,但我发现自己无法做一个我认为合法的上调。我正在尝试将数据上传到Azure中的Blob存储,并希望使用方法CloudBlob.UploadText(string)。但是,当我访问我的blob时,我得到一个CloudBlockBlob实例,据我所知,它可以告诉CloudBlob的继承,并且方法UploadText不可访问,所以我尝试了let blob = targetBlob :> CloudBlob - 它失败了,消息

SmallScript.fsx(28,12): error FS0193: Type constraint mismatch. The type 
    CloudBlockBlob    
is not compatible with type
    CloudBlob    
The type 'CloudBlockBlob' is not compatible with the type 'CloudBlob'

我可以使用UploadFromStream上传数据,但UploadText对我来说非常方便。谁能帮我看看我错过的东西?

对于记录,如果这有帮助,这是有效的代码:

let credentials = StorageCredentials(accountName, accountKey)
let storageAccount = CloudStorageAccount(credentials, true)
let client = storageAccount.CreateCloudBlobClient()

let containerName = "numerics"
let container = client.GetContainerReference(containerName)
container.CreateIfNotExists() |> ignore

let targetBlobName = "MiniSparseMatrix.csv"
let targetBlob = container.GetBlockBlobReference(targetBlobName)

let fileLocation = @"C:\Users\Mathias\Desktop\TestMatrix.txt"
let stream = System.IO.File.OpenRead(fileLocation)
targetBlob.UploadFromStream(stream)
stream.Close()

1 个答案:

答案 0 :(得分:0)

您是否可能引用多个版本的库?我的猜测是,你得到的CloudBlockBlob不是来自与你的代码引用的CloudBlob类型相同的程序集(版本)。

如果您可以注释掉未编译的代码并附加调试器,您应该能够通过检查QuickWatch窗口中的类型并查看其类型来确认这一点(查看.GetType().Assembly和将它与typeof(CloudBlob).Assembly)进行比较。