Как загрузить изображения-капли в Azure с Android - PullRequest
0 голосов
/ 29 марта 2019

Мне трудно загрузить изображение с устройства Android в мою учетную запись хранения Azure Cloud.

Ниже приведен код, с которого я начал работать.Тем не менее, изображение, выбираемое пользователем, возвращает URI, и я не могу заставить работать решение, которое включает преобразование URI в путь к файлу (что жестко закодировано в «рабочем» примере. Я читал в Интернете, что пути к файлам больше не приемлемы, поэтому я попытался преобразовать фотографию в растровое изображение, а также попытался использовать несколько решений, включающих getContextResolver (). Но каждый раз, когда я пробую другую тактику, файл не найден или я получаю исключение нулевого указателя.

//Code that works
final String filePath = "storage/emulated/0/DCIM/Camera/IMG_20190328_141613.jpg";
CloudBlockBlob blob = container.getBlockBlobReference(blobName);
File source = new File(filePath);
blob.upload(new FileInputStream(source), source.length());
//Alternative 1 that doesnt work
CloudBlockBlob blob = container.getBlockBlobReference(blobName);
String[] projection = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(selectedImageUri,projection,null,null,null);
cursor.moveToFirst();
int colIndex = cursor.getColumnIndex(projection[0]);
String filePath = cursor.getString(colIndex);
cursor.close();
File source = new File(filePath);
blob.upload(new FileInputStream(source), source.length());

Любая помощь в этом вопросе очень ценится.

1 Ответ

0 голосов
/ 04 апреля 2019

После долгих исследований я нашел то, что я считаю лучшим решением на данный момент.По сути, мне нужно было скопировать фотографию, которую я пытался отправить из внешнего хранилища во внутреннее, путем преобразования в растровое изображение.Полное решение ниже.Пожалуйста, дайте мне знать, если у кого-то есть лучший.

String connectionString = "{account key}";

CloudStorageAccount storageAccount = CloudStorageAccount.parse(connectionString);

// Create the blob client
CloudBlobClient blobClient = storageAccount.createCloudBlobClient();

// Get a reference to a container
// The container name must be lower case
CloudBlobContainer container = blobClient.getContainerReference({bucketName});

//Create new file
File f = new File(getApplicationContext().getCacheDir(), blobName);
f.createNewFile();

//Create byte array stream
ByteArrayOutputStream bos = new ByteArrayOutputStream();

/*bitmap is loaded in the onCreate method (not shown in this block) Quality is 0-100 where 100 is the best*/
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos);

byte[] bitmapdata = bos.toByteArray();

//write bitmap to file, flush and close.
FileOutputStream fos = new FileOutputStream(f);
fos.write(bitmapdata);
fos.flush();
fos.close();

//upload bitmap from local directory
final String filePath = getApplicationContext().getCacheDir() + blobName;
CloudBlockBlob blob = container.getBlockBlobReference(blobName);
File source = new File(f.getAbsolutePath());
blob.upload(new FileInputStream(source), source.length());
...