开发者社区> 问答> 正文

从数据库选择base 64图像并进行编码时发现速度慢

我在离子框架中工作。当前正在设计带有文本和图像的帖子页面。用户可以在那里发布数据和图像,并且所有信息都是安全的。

因此,我使用base 64编码并将图像保存在数据库中。

encodeURIComponent($scope.image) 每当用户请求时,我都会从表中选择行,并将其与文本一起显示并进行解码。

decodeURIComponent($scope.image) HTML "data:image/jpeg;base64,_______"转换。

效果很好,但是花了我预期的时间。因此,图像的尺寸要大33%,并且看起来整体比较笨拙。

然后,我决定继续进行科尔多瓦的文件上传插件。但是我意识到,以这种方式维护文件是非常危险的。我也尝试将二进制数据保存到数据库中。但是失败了。

没有base64数据的文本选择大大减少了时间。如果可以在选择其他列并显示后,在另一个http呼叫中单独选择图像。处理安全图像是否正确?

展开
收起
保持可爱mmm 2020-05-10 19:45:04 726 0
1 条回答
写回答
取消 提交回答
  • 由于只是个人文件,您可以将它们存储在S3中。

    为了确保文件上传安全,只需在上传之前检查文件的mime类型,即可选择所需的存储空间。

    http://php.net/manual/zh/function.mime-content-type.php

    只需对上传的文件进行快速检查:

    $mime = mime_content_type($file_path); if($mime == 'image/jpeg') return true; 没什么大不了的!

    将文件保留在数据库中是不好的做法,这应该是您的最后资源。S3非常适合许多用例,但对于高使用率而言则很昂贵,并且本地文件应仅用于Intranet和非公共可用的应用程序。

    我认为,请转到S3。

    亚马逊的sdk易于使用,您可以免费使用1GB的存储空间进行测试。您也可以使用自己的服务器,只是将其保留在数据库之外。

    在文件系统上存储图像的解决方案

    假设您有100.000个用户,每个用户都有10张图片。您如何处理本地存储? 问题:成千上万个映像后,Linux文件系统中断,因此您应该使文件结构避免这种情况

    解决方案: 将文件夹名称设置为“ abs(userID / 1000)* 1000” / userID

    这样,当您的用户ID为989787时,其图像将存储在文件夹989000/989787 / img1.jpeg 989000/989787 / img2.jpeg 989000/989787 / img3.jpeg上

    这样就可以为一百万个用户存储图像而不会破坏UNIX文件系统。

    存储大小如何?

    上个月,我不得不为自己从事的电子商务压缩130万jpeg。上传图像时,请使用具有无损标记和80%质量的imagick进行压缩。这将消除不可见的像素并优化存储。由于我们的图片从40x40(缩略图)到1500x1500(缩放图片)不等,因此我们平均获得700x700的图片,是130万张图片的总和,约占120GB的存储空间。

    是的,可以将它们全部存储在文件系统中。

    当事情开始变慢时,您可以租用CDN。

    那将如何工作?

    CDN位于映像服务器的前面,每当CDN被要求提供文件时,如果在其存储中找不到文件(缓存未命中),它将从映像服务器复制它。稍后,当再次请求CDN get时,它将从其自己的缓存中传递图像。

    这样,无需任何代码即可迁移到CDN映像交付,您所需要做的就是更改站点中的URL并租用CDN,这与S3存储桶的工作原理相同。

    它不是一项便宜的服务,但是比cloudfront便宜,而且当您需要它时,您可能可以负担得起。来源:stack overflow

    2020-05-11 12:00:44
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载
云时代的数据库技术趋势 立即下载
超大型金融机构国产数据库全面迁移成功实践 立即下载