Мне, должно быть, не хватает чего-то очевидного здесь, но я не могу сделать upcast, который я считал законным. Я пытаюсь загрузить данные в хранилище Blob в Azure и хотел бы использовать метод CloudBlob.UploadText(string). Тем не менее, когда я получить доступ к моей блоб, я получаю CloudBlockBlob экземпляр, который, насколько я могу сказать наследуется от CloudBlob, и метод UploadText не доступен, поэтому я попытался let blob = targetBlob :> CloudBlob
- который с треском проваливается, с сообщениемНевозможно перейти от CloudBlockBlob к 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()
Вы можете проверить, используете ли вы библиотеку Client Client 1.8 или 2.0? Причина, по которой я спрашиваю об этом, заключается в том, что 'CreateIfNotExists()' в контейнере blob находится в библиотеке 2.0. В 1.8 он называется 'CreateIfNotExist()' (отсутствует «s»). –
Я считаю, что это октябрьский выпуск Azure SDK, если это ответит на ваш вопрос. Синтаксис, похоже, не является проблемой (сценарий проходит и загружает), это повышается между типами blob, которые терпят неудачу. – Mathias
@GauravMantri на самом деле вы можете что-то сказать, а скрипт отображается, а в других местах контейнер распознает только CreateIfNotExist без s. Я буду копать глубже, ваш намек может быть прав, т. Е. Конфликт между версиями библиотеки. – Mathias