Cargar archivo con Azure Storage mediante SAS (Shared Access Signature)

Sé que hay una biblioteca disponible para cargar el archivo usando Azure Storage. He referido esto para el mismo.

Pero, no han dado información sobre cómo utilizar SAS con eso. Tengo nombre de cuenta, y sas url para acceder y cargar archivo allí. Pero no sé cómo usarlo para cargar archivos.

Si utilizo por encima de la biblioteca de mención me muestra invalide cadena de conexión de almacenamiento porque no estoy pasando la clave en ella (que no es necesario con sas). Así que estoy poco confundir que ¿Cómo puedo subir el archivo.

He remitido esta documentación también para cargar archivos usando sas. Pero no obtener los pasos adecuados para hacer esto. Han hecho demo para su aplicación de Windows. Quiero tener eso en android con el uso de sas.

Alguien me puede ayudar en esto?

ACTUALIZAR

He intentado con código abajo con referencia a la aplicación de la consola hecha por Azure para comprobar y para tener acceso a SAS.

try { //Try performing container operations with the SAS provided. //Return a reference to the container using the SAS URI. //CloudBlockBlob blob = new CloudBlockBlob(new StorageUri(new URI(sas))); String[] str = userId.split(":"); String blobUri = "https://myStorageAccountName.blob.core.windows.net/image/" + str[1] + "/story/" + storyId + "/image1.jpg" + sas.toString().replaceAll("\"",""); Log.d(TAG,"Result:: blobUrl 1 : "+blobUri); CloudBlobContainer container = new CloudBlobContainer(new URI(blobUri)); Log.d(TAG,"Result:: blobUrl 2 : "+blobUri); CloudBlockBlob blob = container.getBlockBlobReference("image1.jpg"); String filePath = postData.get(0).getUrl().toString(); /*File source = new File(getRealPathFromURI(getApplicationContext(),Uri.parse(filePath))); // File path blob.upload(new FileInputStream(source), source.length());*/ Log.d(TAG,"Result:: blobUrl 3 : "+blobUri); //blob.upload(new FileInputStream(source), source.length()); //blob.uploadText("Hello this is testing..."); // Upload text file Log.d(TAG, "Result:: blobUrl 4 : " + blobUri); Log.d(TAG, "Write operation succeeded for SAS " + sas); response = "success"; //Console.WriteLine(); } catch (StorageException e) { Log.d(TAG, "Write operation failed for SAS " + sas); Log.d(TAG, "Additional error information: " + e.getMessage()); response = e.getMessage(); } catch (FileNotFoundException e) { e.printStackTrace(); response = e.getMessage(); } catch (IOException e) { e.printStackTrace(); response = e.getMessage(); } catch (URISyntaxException e) { e.printStackTrace(); response = e.getMessage(); } catch (Exception e){ e.printStackTrace(); response = e.getMessage(); } 

Ahora, cuando carga el texto solamente él me dice debajo del error

El servidor no pudo autenticar la solicitud. Asegúrese de que el valor del encabezado de autorización se ha formado correctamente, incluida la firma.

Ahora, mi requisito es cargar archivo de imagen. Así que cuando descomente el código para subir el archivo de imagen no me está dando ningún error, pero ni siquiera cargar el archivo de imagen. No sé qué está mal aquí. Me puede ayudar alguien.

Gracias.

@kumar kundal El mecanismo que usted ha explicado es completamente correcto. A continuación se muestra la respuesta más detallada sobre cómo subir la imagen de perfil al servidor Azure.

Primero crear URL SAS para cargar Imagen (o cualquier archivo) en el almacenamiento blob:

 String sasUrl = ""; // mClient is the MobileServiceClient ListenableFuture<JsonElement> result = mClient.invokeApi(SOME_URL_CREATED_TO_MAKE_SAS, null, "GET", null); Futures.addCallback(result, new FutureCallback<JsonElement>() { @Override public void onSuccess(JsonElement result) { // here you will get SAS url from server sasUrl = result; // You need to parse it as per your response } @Override public void onFailure(Throwable t) { } }); 

Ahora, usted tiene sasURL con usted. Eso será algo como debajo de la cadena:

 sv=2015-04-05&ss=bf&srt=s&st=2015-04-29T22%3A18%3A26Z&se=2015-04-30T02%3A23%3A26Z&sr=b&sp=rw&sip=168.1.5.60-168.1.5.70&spr=https&sig=F%6GRVAZ5Cdj2Pw4tgU7IlSTkWgn7bUkkAg8P6HESXwmf%4B 

Ahora, usted necesita al upend la URL del sas con su url de carga. Vea a continuación el código en el que he upend la URL de SAS con mi solicitud de subida.

 try { File source = new File(filePath); // File path String extantion = source.getAbsolutePath().substring(source.getAbsolutePath().lastIndexOf(".")); // create unique number to identify the image/file. // you can also specify some name to image/file String uniqueID = "image_"+ UUID.randomUUID().toString().replace("-", "")+extantion; String blobUri = MY_URL_TO_UPLOAD_PROFILE_IMAGE + sas.replaceAll("\"",""); StorageUri storage = new StorageUri(URI.create(blobUri)); CloudBlobClient blobCLient = new CloudBlobClient(storage); CloudBlobContainer container = blobCLient.getContainerReference(""); CloudBlockBlob blob = container.getBlockBlobReference(uniqueID); BlobOutputStream blobOutputStream = blob.openOutputStream(); byte[] buffer = fileToByteConverter(source); ByteArrayInputStream inputStream = new ByteArrayInputStream(buffer); int next = inputStream.read(); while (next != -1) { blobOutputStream.write(next); next = inputStream.read(); } blobOutputStream.close(); // YOUR IMAGE/FILE GET UPLOADED HERE // IF YOU HAVE FOLLOW DOCUMENT, YOU WILL RECEIVE IMAGE/FILE URL HERE } catch (StorageException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (Exception e){ e.printStackTrace(); } 

Espero que esta información le ayude mucho para cargar el archivo usando el almacenamiento de blob. Por favor, hágamelo saber si tiene alguna duda aparte de esto. Puedo ayudar en eso.

Puede consultar este artículo https://azure.microsoft.com/en-us/documentation/articles/storage-configure-connection-string/ para averiguar cómo configurar correctamente su cadena de conexión cuando accede a los recursos de una cuenta de almacenamiento a través de Una firma de acceso compartido (SAS).

Subiendo una foto al almacenamiento BLOB . Lo tengo después de buscar durante horas. Tome una mirada: –

Cargar la imagen de la foto es un proceso de varias etapas:

Primero toma una foto e inserta una fila TodoItem en la base de datos SQL que contiene nuevos campos de metadatos utilizados por Azure Storage. Un nuevo script de inserción SQL de servicio móvil solicita a Azure Storage una Shared Access Signature (SAS) . Ese script devuelve el SAS y un URI para el blob al cliente. El cliente carga la foto utilizando el SAS y el URI de blob.

Entonces, ¿qué es un SAS ?

No es seguro almacenar las credenciales necesarias para cargar datos en el servicio Azure Storage dentro de la aplicación cliente. En su lugar, almacena estas credenciales en su servicio móvil y las utiliza para generar una Shared Access Signature (SAS) que concede permiso para cargar una imagen nueva. El SAS , una credencial con un vencimiento de 5 minutos, es devuelto de forma segura por Mobile Services a la aplicación cliente. A continuación, la aplicación utiliza esta credencial temporal para cargar la imagen.

Para más consultas y análisis de detalle. Visite esta documentación oficial https://azure.microsoft.com/en-us/documentation/articles/mobile-services-android-upload-data-blob-storage/

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.