2012-10-24 12 views
5

Ho un'applicazione che consente agli utenti di caricare foto, che sono archiviate in Azure Blob Storage. L'utente ha anche la possibilità di visualizzare queste foto. Per visualizzarli, vogliamo che l'applicazione scarichi l'immagine nella posizione di download predefinita. Al momento, il caricamento funziona perfettamente. Ma la funzione di download che ho trovato per l'API di Azure non sembra fare nulla. Inoltre, non posso davvero specificare una posizione di download perché questa funzionalità deve funzionare su desktop/laptop e su dispositivi mobili che hanno diverse directory di default.Download del file da Azure Blob Storage

Sembra che dovrebbe essere semplice ma non riesco a trovare nulla per aiutarmi.

Ecco un esempio del mio codice:

CloudBlobContainer container = blobClient.GetContainerReference("photos"); 
CloudBlob blob = container.GetBlobReference(photo.BlobUrl); 
//copy blob from cloud to local gallery 
blob.DownloadToFile(photo.ImageName); 

Il blob.DownloadToFile(photo.ImageName); provoca una richiesta di server, ma non succede nulla, alias nessun file viene scaricato.

+1

nessun riferimento per l'oggetto 'foto'? –

risposta

5

Qual è il motivo non si può avere il client di scaricare il file direttamente dal deposito blob e utilizzare la funzionalità integrata di browser per salvarlo? Se i file sono privati, è piuttosto facile generare una firma SAS. Questo scaricherà il download dal tuo server e rimuoverà l'overhead.

+2

Come si fa? – Demodave

3

Mi chiedo che cosa ti aspetti da questo codice, ma soprattutto nel caso di piattaforme diverse questo non funzionerebbe. Suggerisco di utilizzare invece il metodo DownloadToStream. Quindi puoi decidere cosa fare con il flusso. Ad esempio chiedi all'utente dove vuole salvare il file.

+0

Il collegamento è guasto, aggiornare – Eric

+0

corretto, in particolare per @Eric! – astaykov

3

Qui:

blob.DownloadToFile(photo.ImageName); 

È necessario indicare dove salvare il file e il nome che si vuole che sia:

blob.DownloadToFile("C:\mycutepuppy.jpg"); 

si potrebbe usare System.Environment.SpecialFolder enum di figura uscire dalla cartella in base al sistema corrente quindi aggiungere quello che vuoi che sia il nome dell'immagine;

Ecco un esempio più completo:

var imgPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), + photo.ImageName); 

blob.DownloadToFile(imgPath); 

Questo sarebbe salvare l'immagine al percorso corretto dove directory desktop dell'utente è. Ecco la documentazione su quell'enumerazione per cartelle speciali.

http://msdn.microsoft.com/en-us/library/system.environment.specialfolder.aspx

+0

Cosa succede se voglio consentire all'utente di selezionare il percorso? –

+0

Quindi dovresti anteporre il loro percorso davanti al nome dell'immagine come: string userPath = "Qualunque cosa abbiano scelto"; Quindi sarebbe var imgPath = userPath + photo.ImgName; Potresti voler controllare che la directory esista anche prima di provare a salvarla. – ElvisLives

Problemi correlati