【问题标题】:Bad base64 after storing in MySQL存储在 MySQL 后 base64 错误
【发布时间】:2018-08-04 22:30:22
【问题描述】:

我正在为 Max OS X 开发一个简单的应用程序,用于使用 Swift 语言制作屏幕截图。截屏后,我使用以下命令将其转换为 base64 字符串:

screenshot.base64EncodedString()

我的服务器上有一个简单的 .php 文件,用于将此 base64 字符串保存到 MySQL 数据库中。一切正常,但是当我尝试从我的 android 设备上的服务器接收此图像字符串时,它在解码 base64“bad base64”时引发异常。

这是我用来解码图像的:

byte[] decodedString = Base64.decode(encodedImage, Base64.DEFAULT);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length); 

我正在使用它从 MySQL 数据库中放置/获取图像:

输入:INSERT INTO db (screen) VALUES ('$screen') 获取:SELECT * FROM db

我将 base64 作为 LONGTEXT 存储在我的数据库中。

谁能帮帮我?

【问题讨论】:

  • 您指定了很多平台标签。请将标签限制为与问题相关的标签。
  • 当你有例如“测试”这个词什么是 base64 编码的字符串,MySQL 实际上最终存储了什么,你最终要检索什么?
  • “测试”一词在发送前是“dGVzdA==”,在接收后是“dGVzdA==”。它是这样存储在 MySQL 中的
  • = 不是通过 HTTP 请求传输的字符,因此您可能需要在 base64 解码之前进行 url 解码

标签: php mysql swift base64


【解决方案1】:

真正的解决方案是在提交给 MySQL 之前将 base64 编码字符串中的“+”替换为“-”,并在从 MySQL 检索得到原始字符串后将“-”替换为“+”。这是因为 MySQL 用空格替换了“+”。它会解决问题。

【讨论】:

  • 但这已经被建议了。它如何如此迅速地获得了投票,而另一个却没有
  • 是的,你是对的,之前建议的解决方案还可以,但不够详细,比如提到必须通过将“-”重新替换为“+”来重建原始 base64 字符串在检索到的字符串中。
【解决方案2】:

我找到了解决办法!在base64编码的字符串中用“-”替换“+”解决了我的问题。问题是 MySQL 用空格替换了 +。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 2018-08-07
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多