我正在研究一個我朋友前一段時間寫的小型cms。使用主鍵或Guid作爲圖像的名稱
有這個頁面,用戶可以上傳圖片,並在他的個人資料中顯示。我想知道保存這張圖片的最佳方法是什麼。在此CMS它是這樣的:首先是保存到數據庫,並得到它的主鍵後的實體,而圖像上傳到的東西,如Image-{PrimaryKey}.jpg
服務器,然後再訪問數據庫與圖像的全名更新同一實體。 因此,這裏是他的代碼部分:
在控制器:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<bool> Add([Bind(Include = "IdLanguage,Title,Address,Description,IdLinksCategory")]TblLinks tblLinks, string coverPath, string coverBase64)
{
try
{
tblLinks.IdUser = await _permissionService.GetCurrentIdUser();
tblLinks.CreatedDateTime = DateTime.Now;
await _linkService.Add(tblLinks);
if (!string.IsNullOrEmpty(coverPath))
{
byte[] fileByte = _utilityService.GetByteFromBase64String(coverBase64);
var fileType = Path.GetExtension(coverPath);
var fileName = string.Format("Link-{0}{1}", tblLinks.IdLink, fileType);
var fileMapPath = fileName.GetLinkMapPath();
System.IO.File.WriteAllBytes(fileMapPath, fileByte);
tblLinks.ImageName = fileName;
await _linkService.Edit(tblLinks);
}
return true;
}
catch
{
return false;
}
}
和服務層:
public async Task<TblLinks> Add(TblLinks links)
{
_eTblLinks.Add(links);
await _uow.SaveChangesAsync();
_cacheUpdateService.Links();
return links;
}
public async Task Edit(TblLinks links)
{
var query = await (from k in _eTblLinks
where k.IdLink == links.IdLink
select k).FirstOrDefaultAsync();
query.Title = links.Title;
query.Address = links.Address;
query.Description = links.Description;
query.IdLinksCategory = links.IdLinksCategory;
if (!string.IsNullOrEmpty(links.ImageName))
query.ImageName = links.ImageName;
_uow.MarkAsChanged(query);
await _uow.SaveChangesAsync();
_cacheUpdateService.Links();
}
什麼,我有我的,做了一些我的工作就是我」 m使用guid鍵作爲我的圖像的名稱,並將其上傳到服務器,而不是將此GUID鍵與我的實體的其餘部分一起使用,然後立即保存在數據庫中。
那麼哪種方式更好?我的還是他的?
需要注意的是,控制器中的邏輯違背了MVC對問題的分離。 – Dane
@Dane,所以屬於上傳圖片的部分應該在服務層,對嗎? –
這是我對MVC的理解,雖然我不是專家。它只是幫助將事情分開,以便您可以更輕鬆地維護您的應用。 – Dane