使用主键或 Guid 作为映像的名称
本文关键字:映像 Guid | 更新日期: 2023-09-27 18:33:26
我正在研究我朋友不久前写的一个小cms。
有此页面,用户可以上传图像并将其显示在他的个人资料中。我想知道保存此图像的最佳方法是什么。在这个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();
}
我在我的一些工作中所做的是,我使用 guid 键作为我的图像的名称,并将其上传到服务器,而不是将此 guid 键与我的实体的其余部分一起使用,然后立即保存在数据库中。
那么哪种方式更好呢?我的还是他的?
两者都
有效,我认为没有一个比另一个更好(除了数据库中的第二次写入),假设在您的解决方案中您将图像 guid/文件名存储为实体的属性,并且不将其用作实体键。