使用主键或 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 作为映像的名称

两者都

有效,我认为没有一个比另一个更好(除了数据库中的第二次写入),假设在您的解决方案中您将图像 guid/文件名存储为实体的属性,并且不将其用作实体键。