【问题标题】:How to save base64 Android to MySQL database?如何将base64 Android保存到MySQL数据库?
【发布时间】:2020-09-06 21:03:54
【问题描述】:

我正在使用改造将图像发送到 laravel API

D/NetworkManagementSocketTagger: tagSocket(74) with statsTag=0xffffffff, statsUid=-1

I/mple1.messegin: Background concurrent copying GC freed 21904(27MB) AllocSpace objects, 14(3MB) LOS 
objects, 50% free, 18MB/37MB, paused 402us total 102.147ms

E/FF1: 500 Response{protocol=http/1.1, code=500, message=Internal Server Error, 
url=http://192.168.1.8/company_messenger/public/apistore}

我看到第一行,过了一会儿其他两行出现

我收到这些错误,我不知道到底是什么问题

  1. 我将图像转换为base64

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); // bm is the bitmap object
    byte[] b = baos.toByteArray();
    String encodedImage = Base64.encodeToString(b, Base64.DEFAULT);
    
  2. 在 laravel 中,我在 TEXT 类型的列中收到它

PS:当我只发送一个小字符串而不是解码的图像时,它会正确存储

【问题讨论】:

  • 检查服务器的错误日志以查看实际的错误信息?显示客户端的错误只是告诉我们服务器有一个错误,而不是它是什么

标签: android mysql laravel base64


【解决方案1】:

如果您存储的是 base64,文本不会受到影响,但我会将这样的列设为二进制。

但一个 TEXT 或 BLOB(对应的二进制类型)列最多可以有 65535 个字节(base64 编码前为 43690)。对于最多 16 兆字节,请使用 MEDIUMTEXT 或 MEDIUMBLOB 类型。对于最多 4 GB,请使用 LONGTEXT 或 LONGBLOB 类型。

【讨论】:

    【解决方案2】:

    你有哪种类型的专栏?

    必须是二进制,才能存储此类数据

    请参阅有关将数据库中的图像保存为 encodec64 或二进制的讨论Storing image in database directly or as base64 data?

    除了存储大量数据外,还大量增加负载,通常将图像保存在驱动器上并仅保存路径就足够了

    BlOB 和 TEXT 字段中可以保存的最大数据量

    TINYBLOB, TINYTEXT       Up to 255 bytes
    BLOB, TEXT               Up to 64 Kb    
    MEDIUMBLOB, MEDIUMTEXT   Up to 16 Mb
    LONGBLOB, LONGTEXT       Up to 4 Gb
    

    如您所见,TEXt 只能容纳 64 KB 的数据,而且您的图像可能比使用 Base 54 编码的图像更大,进一步增加了大小

    【讨论】:

    • Base64 是文本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多