2016-06-23 4 views
3

私は空白のBLOBを管理するためにシャープを使用してWindowsアプリケーションを作成しています。ブロブをアップロードしたり、ブロブをダウンロードしたり、スナップショットを取ったり、今すぐ私の仕事は、ブロブのスナップショットをダウンロードする(ファイルの古いバージョンをダウンロードする)。WindowsフォームアプリケーションでCシャープを使用して空色のスナップショットをダウンロードする方法

私は、次のコード

 

private void button1_Click(object sender, EventArgs e) 
     { 
      //MessageBox.Show(this.filename); 
      //label1 

      string s1= this.filename; 
      string accountName = "portalvhdsq3jyv0y3gccrn"; 
      string accountKey = "VVPgjNO9V3397kOvoJRRZKtZVZaVNQP2xFPTNoWEp8zPJh4n487HVmwup498T8iufFnDS1Icu0EmUKyHg+DdkA=="; 


      StorageCredentials creds = new StorageCredentials(accountName, accountKey); 
      CloudStorageAccount account = new CloudStorageAccount(creds, useHttps: true); 
      CloudBlobClient client = account.CreateCloudBlobClient(); 
      CloudBlobContainer sampleContainer = client.GetContainerReference("samples"); 
      sampleContainer.CreateIfNotExists(); 
      CloudBlockBlob blob = sampleContainer.GetBlockBlobReference(s1); 

      CloudBlockBlob newBlob; 

      //set the metadata and save it 
      blob.Metadata["OriginalFilename"] = s1; 
      blob.SetMetadata(); 
      //create the snapshot 
      newBlob = blob.CreateSnapshot(); 
      /* 
      label3.Text ="Metadata['OriginalFilename'] = {0}, IsSnapshot = {1}, " + "SnapshotTime = {2}, snapshotURI = {3}"+ " "+newBlob.Metadata["OriginalFilename"]+" "+newBlob.IsSnapshot+" "+newBlob.SnapshotTime+" "+newBlob.SnapshotQualifiedUri; 
      */ 
      // label3.Text = ""; 
      string text1 = ""; 
      //retrieve all of the versions for this blob, then iterate through them 
      IEnumerable listOfBlobs = sampleContainer.ListBlobs(s1, true, BlobListingDetails.Snapshots); 
      foreach (IListBlobItem blobItem in listOfBlobs) 
      { 
       //you must cast this as a CloudBlockBlob 
       // because blobItem does not expose all of the properties 
       CloudBlockBlob theBlob = blobItem as CloudBlockBlob; 

       //Call FetchAttributes so it retrieves the metadata. 
       theBlob.FetchAttributes(); 

       //print the snapshot informatino 
       /* System.Diagnostics.Debug.Print("theBlob IsSnapshot = {0}, SnapshotTime = {1}, snapshotURI = {2}", 
        theBlob.IsSnapshot, theBlob.SnapshotTime, theBlob.SnapshotQualifiedUri);*/ 

       // text1 = text1 + "theBlob IsSnapshot = {0}, SnapshotTime = {1}, snapshotURI = {2}" + " @" + theBlob.IsSnapshot + " " + theBlob.SnapshotTime + " " + theBlob.SnapshotQualifiedUri; 



       //in case there's more than one piece of metadata, 
       // iterate through the metadata and display each key-value pair 
       int index = 0; 
       foreach (KeyValuePair kvPair in theBlob.Metadata) 
       { 
        index++; 
       //  text1 = text1 + "@.MetaData {0} = {1},{2}@" + index + kvPair.Key + kvPair.Value; 
       } 
       createButton(theBlob.SnapshotQualifiedUri); 
      //  text1 = text1 + "@@@"; 
       MessageBox.Show(theBlob.SnapshotQualifiedUri.ToString()); 

      } 
     // text1 = text1.Replace("@", System.Environment.NewLine); 

      // label1.Text = text1; 
      button2.Enabled = true; 
     } 

を使用してperticularブロブのスナップショットを一覧表示しています

StorageCredentials creds = new StorageCredentials(accountName, accountKey); 
     CloudStorageAccount account = new CloudStorageAccount(creds, useHttps: true); 

     //MessageBox.Show(sender.ToString()); 
     Uri myUri; 
     string uri; 
     var btn = sender as Button; 
     uri = btn.Text; 
     if (btn != null) 
     { 
      // MessageBox.Show(btn.Text); 

      myUri = new Uri(btn.Text); 
      MessageBox.Show(myUri.ToString()); 

     } 
     // Create the blob client. 
     CloudBlobClient blobClient = account.CreateCloudBlobClient(); 
     // Retrieve reference to a previously created container. 
     CloudBlobContainer container = blobClient.GetContainerReference("samples"); 
     //CloudBlobContainer sampleContainer = client.GetContainerReference("samples"); 

     string[] parts = uri.Split('/'); 
     string fileName = ""; 

     if (parts.Length > 0) 
      fileName = parts[parts.Length - 1]; 
     else 
      fileName = uri; 


     CloudBlockBlob blockBlob = container.GetBlockBlobReference(fileName); 

     // Save blob contents to a file. 
     try 
     { 


      using (var fileStream =  System.IO.File.OpenWrite(@"C:\Users\dev1\Desktop\rakshi1.jpg")) 
      { 
       blockBlob.DownloadToStream(fileStream); 
      } 
     } 

     catch (Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); 
     } 

次のコードを使用して、BLOBファイルをダウンロードするが、私はどのように各スナップショットをダウンロードするには見当がつかない

このコードをcreate_buttonおよびbtn_clickメソッドで更新しています

 




    private void createButton(Uri uri1) 
     { 
      MessageBox.Show("hhhhhhhis"); 

      //This block dynamically creates a Button and adds it to the form 
      Button btn = new Button(); 
      btn.Name = "btn1"; 
      btn.Location = new Point(3 + i, 14 + x); 
      btn.BackColor = System.Drawing.Color.White; 
      btn.Text = uri1.ToString(); 
      btn.Width = 370; 
      btn.TextAlign = ContentAlignment.MiddleLeft; 
      //Hook our button up to our generic button handler 
      btn.Click += new EventHandler(btn_Click); 
      this.Controls.Add(btn); 
      // textBox1.Text = textBox1.Text + "hai"; 
      //i += 20; 
      x += 30; 

     } 



void btn_Click(object sender, EventArgs e) 
     { 
      StorageCredentials creds = new StorageCredentials(accountName, accountKey); 
      CloudStorageAccount account = new CloudStorageAccount(creds, useHttps: true); 

      //MessageBox.Show(sender.ToString()); 
      Uri myUri; 
      string uri; 
      var btn = sender as Button; 
      uri = btn.Text; 
      if (btn != null) 
      { 
       // MessageBox.Show(btn.Text); 

       myUri = new Uri(btn.Text); 
       MessageBox.Show(myUri.ToString()); 

      } 
      // Create the blob client. 
      CloudBlobClient blobClient = account.CreateCloudBlobClient(); 
      // Retrieve reference to a previously created container. 
      CloudBlobContainer container = blobClient.GetContainerReference("samples"); 
      //CloudBlobContainer sampleContainer = client.GetContainerReference("samples"); 
      // Retrieve reference to a blob named "photo1.jpg". 
      string[] parts = uri.Split('/'); 
      string fileName = ""; 

      if (parts.Length > 0) 
       fileName = parts[parts.Length - 1]; 
      else 
       fileName = uri; 
      // MessageBox.Show(fileName); 

      CloudBlockBlob blockBlob = container.GetBlockBlobReference(fileName); 

      // Save blob contents to a file. 
      try 
      { 
       // using (Stream outputFile = new FileStream("rakshi.jpg", FileMode.Create)) 
       //{ 
       //blockBlob.DownloadToStream(outputFile); 
       //} 


       using (var fileStream = System.IO.File.OpenWrite(@"C:\Users\dev1\Desktop\rakshi1.jpg")) 
       { 
        blockBlob.DownloadToStream(fileStream); 
       } 
      } 

      catch (Exception ex) 
      { 
       // Console.WriteLine(ex); 
       MessageBox.Show(ex.ToString()); 
      } 







     } 



Create_button()関数は、各スナップショットを要求し、私はボタンをクリックすると、スナップショットへのボタンcorespondsのリストを別のフォームを表示私はsnapshot.butをダウンロードする必要があり、今ではいくつかの例外

+0

スナップショットをプロモートしたり、スナップショットを別のBLOBにコピーしてから読み取ったりすることができます。 – Aravind

+0

'ボタンをクリックしたときにsnapshot.butをダウンロードする必要があります。これで、いくつかの例外が発生します。 ' - >あなたは例外を記述できますか? –

答えて

2

を発射することは実際にはかなりストレートです進む!ブロブのIsSnapshotプロパティが真であることを確認したら、そのブロブでダウンロード機能を呼び出すことができます。

static void DownloadBlobSnapshot() 
    { 
     var cred = new StorageCredentials(accountName, accountKey); 
     var account = new CloudStorageAccount(cred, true); 
     var client = account.CreateCloudBlobClient(); 
     var container = client.GetContainerReference("snapshot-download-test"); 
     IEnumerable listOfBlobs = container.ListBlobs(null, true, BlobListingDetails.Snapshots); 
     var downloadPath = @"D:\temp\"; 
     foreach (IListBlobItem blobItem in listOfBlobs) 
     { 
      var theBlob = blobItem as CloudBlockBlob; 
      if (theBlob != null) 
      { 
       if (theBlob.IsSnapshot) 
       { 
        theBlob.DownloadToFile(downloadPath + theBlob.Name.Replace("/", "\\"), FileMode.Create); 
       } 
      } 
     } 
    } 

ブロブの属性またはメタデータを取得する必要はありません。上記のコードは明らかに簡単です。ブロブに複数のスナップショットがあり、各スナップショットを個別に保存する場合は、ファイル名にblobのスナップショットの日付/時刻を挿入する必要があります。

+0

Sirありがとうございます。perlular blobのすべてのスナップショットを表示したいと思います。perticularスナップショットをクリックすると、ダウンロードしてください。スナップショットのダウンロード可能なリンクを取得します。 – rakshi

+2

スナップショットURIについては、BlobのSnapshotQualifiedUri'プロパティを使用できます。 blobのスナップショットのURLが表示されます。 –

+0

しかし、そのURLはベースurlと同じです.iは、そのurl.allを使用してスナップショットをダウンロードできません.blobをダウンロードします。 – rakshi

関連する問題