Mah*_*han 1 php mysql base64 angularjs ionic-framework
我正在离子框架中工作。目前正在设计一个包含文本和图像的帖子页面。用户可以在那里发布数据和图像,所有这些都是安全的。
因此,我使用 Base 64 编码并将图像保存在数据库中。
encodeURIComponent($scope.image)
Run Code Online (Sandbox Code Playgroud)
每次当用户请求时,我从表中选择行并将它们与文本一起显示并对其进行解码。
decodeURIComponent($scope.image)
Run Code Online (Sandbox Code Playgroud)
与 HTML"data:image/jpeg;base64,_______"转换。
工作正常,但花费了我预期的时间。因此,图像尺寸增大了 33%,并且看起来完全凸起。
然后我决定继续使用cordova的文件上传插件。但我意识到,以这种方式维护文件风险很大,而且很复杂。我还尝试将二进制数据保存到数据库中。但失败了。
没有 Base64 数据的文本选择大大减少了时间。在选择其他列并显示后,是否可以在另一个 http 调用中单独选择图像。这是处理安全图像的正确机制吗?
mysql手册对此有什么说法? http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-optimization-tips.html
使用 Web 服务器,将图像和其他二进制资源存储为文件,并将路径名存储在数据库中而不是文件本身。大多数 Web 服务器更擅长缓存文件而不是数据库内容,因此使用文件通常更快。(尽管在这种情况下您必须自己处理备份和存储问题。)
工作正常,但花费了我预期的时间。因此,图像尺寸增大了 33%,并且看起来完全凸起。
正如您所发现的,编码/解码中不必要的开销+额外的空间被用完,这意味着额外的数据来回传输。
正如@mike-m 提到的。Base64 编码不是一种压缩方法。为什么使用 Base64 编码也可以通过 @mike-m 发布的 What is base 64编码的用途?的链接来回答。
简而言之,在将图像存储到文件系统(无论是 S3 还是其他文件系统)之前,对图像进行 Base64 编码不会带来任何好处,而且会损失很多。
不涉及 base64 的 Gzip 或其他形式的压缩怎么样?答案再次是,没有什么可得到的,却有很多可失去的。例如,我刚刚压缩了 1941980 JPEG 图像并保存了 4000 字节,即节省了 0.2%。
原因是图像已经是压缩格式。它们不能被进一步压缩。
当您存储不压缩的图像时,它们可以直接传送到浏览器和其他客户端,并且可以缓存。如果它们被压缩(或 base64 编码),则需要由您的应用程序解压缩。
现代浏览器能够显示嵌入到 HTML 中的 Base64 图像,但它们无法缓存,并且数据比需要的大大约 30%。
用户可以在那里发布数据和图像,所有这些都是安全的。
我认为您的意思是用户可以下载属于他或与他共享的图像。这可以通过将文件保存在文件系统中的网络空间中并仅保存数据库中的路径来轻松实现。然后使用fpassthru将文件发送到客户端(完成所需的检查后)
他们如何处理图像文件。在性能问题中,当涉及大用户时,我觉得我需要 100000 个用户及其子文件夹的 100000 个文件夹。当大量用户浏览相同的根文件夹时,文件系统如何处理每个唯一的文件夹。
使用 CDN 或使用专门适合此目的的文件系统,例如 BTRFS
数据库具有良好的搜索功能、良好的线程安全连接、良好的会话管理。当涉及大型操作时,这种情况是否会改变
确实是的。通过在数据库中保存有关文件及其文件路径的所有信息来充分利用它。然后将文件本身保存在文件系统中。您将两全其美。