【问题标题】:Image Upload takes a lot of time to save in database图片上传需要很长时间才能保存在数据库中
【发布时间】:2019-08-22 03:50:41
【问题描述】:

我遇到一个问题,当我上传一张图片时,即使它只有 1MB,也需要很长时间才能上传。

我的上传过程是首先使用<input type='file'>,然后将上传的图像转换为base64,将其转换为字节,然后将其保存到image数据类型的数据库中。

这是我的 SQL(存储过程):

IF EXISTS(SELECT * FROM VisitationLogs_BVL where UserIdx = @UserIdx and OutletIdx = @OutletIdx and convert(varchar, DateVisited, 23) = convert(varchar, getdate(), 23))
    BEGIN
        SELECT 0 'Result'
    END
ELSE
    BEGIN
        INSERT INTO VisitationLogs_BVL(UserIdx,OutletIdx,CashierUser,IPAddress,Remarks,[Image])
        VALUES(@UserIdx,@OutletIdx,@CashierUser,@IPAddress,@Remarks,@image)
        SELECT @@ROWCOUNT Result, SCOPE_IDENTITY() AssignIdx
    END

【问题讨论】:

  • 我会使用 FormData 和 AJAX 将文件发送到您的服务器。然后您可以像往常一样访问该文件,将文件作为文件保存到您的服务器,同时单独保存该文件名的数据。

标签: javascript html sql-server


【解决方案1】:

我建议您不要将图像存储在数据库中。相反,您可以将图像保存在服务器中,并且可以将图像的路径存储在数据库中。或者你也可以使用 Azure Blob 存储来保存图像。

【讨论】:

  • 如果我已经开始将图像保存为字节怎么办?当我改变插入图片的方式时,获取图片会出现问题。
【解决方案2】:

在数据库中存储图像是一个很大的问题,因为它使用大量资源。并且通过将图像转换为 base64 您正在使用更多资源,存储图像的最佳方法是将它们存储在像亚马逊 s3 这样的 CDN 中,因为这样您就让亚马逊负责整个上传过程,而不会放对您的数据库和服务器收费。将图像上传到 s3 后,您就可以获取它的 url 并将其显示在您的 html 中。这是使用 CDN 存储图像的最有效方式,还将确保您的图像在全球范围内缓存。

【讨论】:

    【解决方案3】:

    强烈建议不要将图像存储在 SQL 数据库中,因为这会极大地降低性能。推荐的方式是将它们存储为纯图像文件,仅存储数据库中的路径。然后使用一个简单的 http 服务器来提供这些静态文件。

    更多信息:https://www.microsoft.com/en-us/research/publication/to-blob-or-not-to-blob-large-object-storage-in-a-database-or-a-filesystem

    【讨论】:

    • 链接的文章是13岁。我知道这个主题仍然很重要,但数据库功能一直在发展。
    • @bb 谁关心文章的年龄,当它包含仍然有效的事实时
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 2016-01-17
    相关资源
    最近更新 更多