У меня сработало следующее:
private void AddImage_Click(object sender, EventArgs args)
{
Intent intent = new Intent();
intent.SetType("image/*");
intent.SetAction(Intent.ActionGetContent);
StartActivityForResult(Intent.CreateChooser(intent, "Select Picture"), 1);
}
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
if ((requestCode == 1) && (resultCode == Result.Ok) && (data != null)
{
Android.Net.Uri uri = data.Data;
string path = GetPathToImage(uri);
Blob.UploadFileInBlob(path);
}
}
private string GetPathToImage(Android.Net.Uri uri)
{
ICursor cursor = ContentResolver.Query(uri, null, null, null, null);
cursor.MoveToFirst();
string document_id = cursor.GetString(0);
if (document_id.Contains(":"))
document_id = document_id.Split(':')[1];
cursor.Close();
cursor = ContentResolver.Query(
MediaStore.Images.Media.ExternalContentUri,
null, MediaStore.Images.Media.InterfaceConsts.Id + " = ? ", new string[] { document_id }, null);
cursor.MoveToFirst();
string path = cursor.GetString(cursor.GetColumnIndex(MediaStore.Images.Media.InterfaceConsts.Data));
cursor.Close();
return path;
}
public class Blob
{
public static async void UploadFileInBlob(string path)
{
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("[string here]");
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("[Your container here]");
await container.CreateIfNotExistsAsync();
CloudBlockBlob blockBlob = container.GetBlockBlobReference("[Your Blob reference here]");
await blockBlob.UploadFromFileAsync(path);
}
}
Примечание: Обязательно предоставьте READ_EXTERNAL_STORAGE под Требуемые разрешения в Манифест Android через свойства проекта. Кроме того, включите разрешение Storage на вашем устройстве для приложения. Не забудьте добавить расширение файла (например, jpg) в path
или в любую переменную, которую вы используете.