2017-10-25 38 views
0

最近私はここで質問をしました。Gaurav Mantriのおかげで、blob azureにメタデータを追加することができました。 AzureBlobStorageクラスで編集した後に私のコード:Azureでメタデータを追加、編集する

public void SaveMetaData(string fileName, string container, string key, string value) 
{ 
    var blob = GetBlobReference(fileName, container); 
     blob.FetchAttributes(); 
     blob.Metadata.Add(key, value); 
     blob.SetMetadata(); 
} 

と私はこれでmyControllerからそれを呼び出す:コードアップロード取得するためにファイル

public IEnumerable<Attachment> GetUploadedFiles(string container, string blobprefix) 
    { 
     if (string.IsNullOrWhiteSpace(container)) 
      container = EPlantDefaultBlobContainer; 

     var storageAccount = CreateStorageAccountFromConnectionString(GetStorageConnectionString()); 
     var blobContainer = GetBlobContainer(storageAccount, container); 

     var resultList = new List<Attachment>(); 
     try 
     { 
      foreach (IListBlobItem item in blobContainer.ListBlobs(blobprefix, false)) 
      { 
       var blob = (CloudBlockBlob) item; 
       var file = new Attachment 
       { 
        Name = blob.Name.Substring(blob.Name.LastIndexOf('/') + 1), 
        Size = blob.Properties.Length, 
        Extension = Path.GetExtension(blob.Name) 
       }; 
       resultList.Add(file); 
      } 
     } 
     catch (Exception e) 
     { 

     } 

     return resultList; 
    } 

public JsonResult SaveMetaData(string name, string key, int id) 
    { 
     var uploadedFils = _FileStorage.GetUploadedFiles("images", id + "/"); 


if (!uploadedFils.Any()) 
       _FileStorage.SaveMetaData(name, "images", key, "true"); 
     foreach (var file in uploadedFils) 
     { 
      if (name == file.Name) 
      { 
       _FileStorage.SaveMetaData(FormatFileName(id, name), "images", key, "true"); 

      } 
      else 
      { 
       _FileStorage.SaveMetaData(FormatFileName(id, file.Name), "images", key, "false"); 

      } 
     } 
     return Json(""); 


    } 

と、私はこのアクションを呼び出しますアクティブに設定したい画像をクリックします。 初めて動作しますが、2回目のクリックで編集する方法がわかりません。特にAzureを初めて扱うのは初めてですか? この行の背後にあるロジック:ギャラリーが空で、ユーザーが最初に画像をアップロードする際に、このイメージをアクティブに自動的に設定されます。

if (!uploadedFils.Any()) 
      _FileStorage.SaveMetaData(name, "images", key, "true"); 
+0

2回目と1回目のクリックで何を意味しますか? –

+0

@PeterBons first click画像をアクティブに設定しましたが、ギャラリーに複数の画像があるため、2回目のクリックで別の画像が有効になります – Adam

+0

質問を編集して「GetUploadedFiles」のコードを追加できますか? –

答えて

0

はあなたの説明によると、私はあなたがする必要がある、あなたのコードをチェックします次のようにコードを変更:あなたのAzureBlobStorageクラスの下

SaveMetaData方法:

public void SaveMetaData(string fileName, string container, string key, string value) 
{ 
    var blob = GetBlobReference(fileName, container); 
    blob.FetchAttributes(); 
    if (blob.Metadata.ContainsKey(key)) 
    { 
     blob.Metadata[key] = value; 
    } 
    else 
     blob.Metadata.Add(key, value); 
    blob.SetMetadata(); 
} 

のシナリオに基づいて、あなたの画像ファイルがにアップロードされます。コントローラーの下にSaveMetaDataを呼び出す前に、特定のパラメーターnameidのファイルがブロブストレージに存在することを確認する必要があります。私は、あなたが次のコードスニペットを削除する必要があると仮定:

if (!uploadedFils.Any()) 
    FileStorage.SaveMetaData(name, "images", key, "true"); 

注:何のファイルが存在していない場合、あなたはそれのためのメタデータを更新/追加できませんでした。また、idを組み合わせずに、パラメータfileNameに対してnameを設定するだけです。私の理解に基づいて、SaveMetaDataメソッドは、既存のファイルのメタデータを設定するために使用されます。上記のロジックをファイルをアップロードするアクションに移動し、ファイルがない場合はデフォルトのメタデータを設定することをお勧めします。

+0

答えがありがとう – Adam