Add , Edit Metadata in Azure

 ̄綄美尐妖づ 提交于 2019-12-11 14:45:27

问题


I recently asked a question here and thanks to Gaurav Mantri I could add Metadata to blob azure . my Code after editing in AzureBlobStorage class :

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

and I call it from myController by this :

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


    }

the code to get uploaded file

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

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

and I call this action when I click on the desired image that I want to set as active . for first time it works , but I don't know how to edit it for second click ,specially this is first time for me dealing with Azure ? the logic behind this line that : when the Gallery is empty and the users upload the first image , this image will be set automatically to active:

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

回答1:


According to your description, I checked your code, you need to modify your code as follows:

SaveMetaData method under your AzureBlobStorage class:

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

Based on your scenario, your image files would be uploaded to images\{id}\{filename}. And before you invoke the SaveMetaData under your controller, you need to make sure the file with the specific parameters name and id exists in your blob storage. I assumed that you need to remove the following code snippet:

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

Note: If there has no files, you could not add/update the meta data for it. Also, you just set the name for the parameter fileName without combining the id. Based on my understanding, the SaveMetaData method is used to set meta data for existing files. I recommend you move the above logic to the action for uploading the file and set the default meta data if there has no files.



来源:https://stackoverflow.com/questions/46935088/add-edit-metadata-in-azure

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!