2012-10-24 53 views
5

私はユーザーがAzure Blob Storageに保存されている写真をアップロードできるアプリケーションを持っています。ユーザーはまた、これらの写真を見ることができます。それらを表示するには、アプリケーションがデフォルトのダウンロード場所に画像をダウンロードするようにします。現在のところ、アップロードは完璧に機能します。しかし、私がAzure APIで見つけたダウンロード機能は何もしていないようです。また、この機能はデスクトップ/ラップトップだけでなく、異なるデフォルトディレクトリを持つモバイルデバイスでも動作する必要があるため、実際にダウンロード場所を指定することはできません。ファイルをAzure Blobストレージからダウンロードする

これはシンプルにする必要があるようですが、私を助けるものは何も見つかりません。ここで

は、私のコードのサンプルです:何のファイルがダウンロードされていない別名、

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

blob.DownloadToFile(photo.ImageName);は、サーバ要求を引き起こすが、何も起こりません。

+1

「写真」オブジェクトの参照はありませんか? –

答えて

5

あなたは、クライアントがブロブストレージから直接ファイルをダウンロードし、それを保存するために、組み込みのブラウザ機能を使用することはできません任意の理由は?ファイルがプライベートである場合、SAS署名を生成するのは簡単です。これにより、サーバーからのダウンロードがオフロードされ、そのオーバーヘッドが削除されます。

+2

どうすればいいですか? – Demodave

3

私はあなたがこのコードから何を期待しているのだろうと思っていますが、特に異なるプラットフォームの場合、これはうまくいかないでしょう。代わりにDownloadToStreamメソッドを使用することをお勧めします。次に、ストリームで何をすべきかを決めることができます。たとえば、ファイルを保存する場所をユーザーに尋ねます。ここで

+0

リンクが死んでいます – Eric

+0

を修正してください - 特に@Ericの場合は修正されました! – astaykov

3

blob.DownloadToFile(photo.ImageName); 

あなたはどこあなたがそれを可能にするファイルと名前を保存を指示する必要があります。

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

あなたがフィギュアにSystem.Environment.SpecialFolder列挙型を使用することができます現在のシステムに基づいてフォルダを取り出し、イメージ名を追加します。ここで

は、より完全な例です:

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

blob.DownloadToFile(imgPath); 

これは、ユーザーのデスクトップディレクトリがある正しいパスにイメージを保存します。特別なフォルダのenumに関するドキュメントは次のとおりです。

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

+0

ユーザーがパスを選択できるようにするにはどうすればよいですか? –

+0

次に、イメージ名の前にパスを追加します。string userPath = "何を選んだか";したがって、それはvarになりますimgPath = userPath + photo.ImgName;そこに保存しようとする前に、ディレクトリが存在していることを確認することもできます。 – ElvisLives

関連する問題