6

So che è disponibile una libreria per caricare il file utilizzando Archiviazione di Azure. Mi riferisco allo this per lo stesso.Carica file con Archiviazione di Azure utilizzando SAS (firma di accesso condiviso)

Tuttavia, non hanno fornito informazioni su come utilizzare SAS con quello. Ho il nome dell'account e l'URL di sas per l'accesso e caricare il file lì. Ma non so come usarlo per caricare il file.

Se uso la libreria sopra menzionata, mi mostra una stringa di connessione di archiviazione invalida perché non sto passando la chiave in essa (che non è richiesta con sas). Quindi sono poco confuso su Come posso caricare il file.

Mi riferisco alla documentazione this anche per il caricamento di file tramite sas. ma non ottenere i passaggi corretti per farlo. Hanno fatto demo per la loro app di Windows. Voglio averlo in Android con l'uso di sas.

Qualcuno può aiutarmi in questo?

UPDATE

devo provare con il codice di seguito con riferimento alla console app made by Azure per controllare e accedere 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(); 
    } 

Ora, quando si invia il testo solo mi dice sotto l'errore

Server non è riuscito a autenticare la richiesta. Assicurati che il valore dell'intestazione di autorizzazione sia formato correttamente, inclusa la firma.

Ora, il mio requisito è quello di caricare il file di immagine. Quindi, quando ho decommentato il codice per caricare il file immagine, non mi sta dando alcun errore ma nemmeno il caricamento del file immagine. Non so cosa c'è di sbagliato qui. Qualcuno può aiutarmi qui.

Grazie.

+0

Si prega di confermare sas nella domanda –

+0

@subhashsingh cosa intendi con conferma sas nella mia domanda? Non capisco quello che stai dicendo. –

+0

@subhashsingh puoi rispondere alla mia domanda? Non sto ottenendo il significato del tuo commento. –

risposta

1

@kumar kundal Il meccanismo che hai spiegato è completamente giusto. Segue la risposta più dettagliata sul caricamento dell'immagine del profilo sul server di Azure.

Innanzitutto creare SAS URL per caricare immagine (o qualsiasi file) al deposito 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) { 
     } 
    }); 

Ora, si ha sasURL con voi. Che sarà qualcosa di simile sotto stringa:

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 

Ora, è necessario capovolgere l'url sas con il vostro URL upload. Vedi sotto il codice in cui ho aggiornato l'url SAS con la mia richiesta di caricamento.

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(); 
    } 

Spero che questa informazione sia di grande aiuto per il caricamento del file tramite l'archiviazione BLOB. Per favore fatemi sapere se avete qualche dubbio oltre a questo. Posso aiutare in questo.

+0

help me su questo .. Come utilizzare la singola classe per la serializzazione di più tabelle –

1

È possibile fare riferimento a questo articolo https://azure.microsoft.com/en-us/documentation/articles/storage-configure-connection-string/ per scoprire come configurare correttamente la stringa di connessione quando si accede alle risorse in un account di archiviazione tramite una firma di accesso condiviso (SAS).

+0

Grazie per la risposta. Non sto usando ora storageConnectionString. perché non è richiesto in caso di usinf sas. Sto usando la tecnica sas adesso. Si prega di controllare la mia domanda aggiornata ora e vedere anche questo link di riferimento: https://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-shared-access-signature-part-2/#part-2- create-a-console-application-to-test-the-shared-access-signatures –

0

Caricamento di una foto a BLOB archivio. Ho preso dopo aver cercato per ore .Prendere uno sguardo: -

Caricamento l'immagine fotografica è un processo a più fasi:

In primo luogo si scatta una foto, e inserire una riga TodoItem nel database SQL che contiene nuova meta- campi di dati utilizzati da Archiviazione di Azure. Un nuovo script di inserimento SQL del servizio mobile richiede Archiviazione di Archiviazione per un Shared Access Signature (SAS). Questo script restituisce il SAS e un URI per il blob sul client. Il client carica la foto, utilizzando l'URI SAS e blob.

Che cos'è un SAS?

Non è sicuro memorizzare le credenziali necessarie per caricare i dati nel servizio di archiviazione di Azure all'interno dell'app client. Invece, memorizzi queste credenziali nel tuo servizio mobile e usale per generare un Shared Access Signature (SAS) che concede il permesso di caricare una nuova immagine.Lo SAS, una credenziale con una scadenza di 5 minuti, viene restituito in modo sicuro dai Servizi mobili all'app client. L'app utilizza quindi questa credenziale temporanea per caricare l'immagine.

per ulteriori richieste e analisi di dettaglio. Visita questa documentazione ufficiale https://azure.microsoft.com/en-us/documentation/articles/mobile-services-android-upload-data-blob-storage/