我最近在这里问了一个问题,感谢Gaurav Mantri我可以添加元数据到blob azure。 在AzureBlobStorage类中编辑后的代码:
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 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("");
}
获取上传文件的代码
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;
}
当我点击想要设置为活动状态的所需图像时,我会调用此操作。 这是第一次有效,但我不知道如何编辑它第二次点击,特别是这是我第一次与Azure打交道? 这一行背后的逻辑:当图库为空并且用户上传第一张图像时,该图像将自动设置为活动状态:
if (!uploadedFils.Any())
_FileStorage.SaveMetaData(name, "images", key, "true");
答案 0 :(得分:1)
根据您的描述,我检查了您的代码,您需要修改您的代码,如下所示:
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();
}
根据您的方案,您的图片文件将上传到images\{id}\{filename}
。在调用控制器下的 SaveMetaData 之前,需要确保blob存储中存在具有特定参数name
和id
的文件。我假设您需要删除以下代码段:
if (!uploadedFils.Any())
FileStorage.SaveMetaData(name, "images", key, "true");
注意:如果没有文件,则无法为其添加/更新元数据。另外,您只需为参数name
设置fileName
,而无需合并id
。根据我的理解,SaveMetaData
方法用于为现有文件设置元数据。我建议您将上述逻辑移至上传文件的操作,如果没有文件则设置默认元数据。