当前位置: 首页 > 面试题库 >

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

万俟招
2023-03-14
问题内容

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

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

encodeURIComponent($scope.image)

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

decodeURIComponent($scope.image)

HTML "data:image/jpeg;base64,_______"转换。

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

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

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


问题答案:

由于只是个人文件,您可以将它们存储在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便宜,而且当您需要它时,您可能可以负担得起。



 类似资料:
  • 问题内容: 我正在尝试从网上获取图片并使用base64对其进行编码。 到目前为止,我基本上是: 这似乎非常接近解决方案,但我不能完全解决它。它识别数据类型并给出输出: 但是,缓冲区列表“ bl”似乎为空。 提前致谢! 问题答案: BufferList已过时,因为它的功能现在在Node核心中。唯一棘手的部分是将请求设置为不使用任何编码:

  • 问题内容: 我正在为Firefox / IE构建一个开放式搜索附加组件,并且该图像需要经过Base64编码,因此如何对我拥有的收藏夹图标进行64位编码? 我只熟悉PHP 问题答案: 据我记得,图像数据有一个xml元素。您可以使用此网站对文件进行编码(使用上载字段)。然后,只需将数据复制并粘贴到XML元素即可。 您也可以这样使用PHP来做到这一点: 使用Mozilla指南获取有关创建OpenSear

  • 我正在尝试从图库中浏览一个图像。但我得到以下运行时异常 代码是

  • 问题内容: 使用Node v0.2.0,我试图从服务器获取图像,将其转换为base64字符串,然后将其嵌入图像标签中的页面上。我有以下代码: 注意:此代码需要“ 表达 ”和“ 请求 ”。当然是node。如果已安装npm,则它应该像“ npm install express”或“ npm install request”一样简单。 不幸的是,这不能按预期工作。如果我使用Google徽标进行转换,则在

  • 问题内容: 我需要在手机中打开我的画廊,然后选择一张在活动中在imageview中打开的图片..没什么困难..但是我在模拟器(genymotion)中有完美的代码和thise代码可以运行..但是在小米Mi4上却没有。 打开画廊选择项目,什么也没有。 我没有更多的电话了:( 我尝试下载一些与此主题相关的示例,并且每个示例都是相同的。 您是否有一些从图库中选择图像并在imageview中显示的项目?如

  • 我想采取一个当前的base64编码的图像,并使用一个简短的哈希说“84dskh”,以“加密”的图像到另一个完全有效的base64编码图像。 原始图像不必经过base64编码,最终我想要原始图像的加密图像,但它仍然是一个可以在img标记中显示的有效图像:。 最好使用JavaScript。