真心吐槽一下微信小程序,上传图片竟然不支持多张一起传。所以,没办法了,后端只能配合做单个单个上传洛。
遇到的问题:如标题描述,后端mysql存储图片字段用的是json,框架是laravel,model里面用casts将字段imgs转换成array,方便php处理。
代码示例:(注释掉的一行是我后面为了解决bug加上的)
问题是,每次小程序那边上传多张图片,我这边数据库里面都只记录了一张图片的地址,很是疑惑。
后来每次把$old打印出来,结果每次都是空数组,于是想到了,可能是因为请求过快,比如3张图片一起传过来,每次读取的时候都没读取到信息,然后就都只保存了自己的,只有最后一个请求完成的生效。
看了下阿里云oss上面的记录,显示3张图片都收到了,这印证了我的想法。于是让小程序那边请求,做个间隔,比如500毫秒,不要一次性请求,结果bug立马消失,数据库成功记录了3张图片。
不过这不是最佳解决办法呀。
想起来了,这是数据库隔离级别的问题。于是乎,去查阅了Mysql的4种隔离级别介绍,内容太长,贴个地址供参考:https://www.jianshu.com/p/4e3edbedb9a8
最后采用设置会话隔离级别为串行化,解决bug。虽然这会导致第二张图片的上传阻塞,但是为了系统的功能性,以及实际业务的情况,决定还是采用这种办法。不过,Innodb是行级锁,应该问题不大~