微信小程序上传多张图片,后端只保存了最后一张的Bug

  真心吐槽一下微信小程序,上传图片竟然不支持多张一起传。所以,没办法了,后端只能配合做单个单个上传洛。

  遇到的问题:如标题描述,后端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是行级锁,应该问题不大~

转载于:https://www.cnblogs.com/purelightme/p/9933508.html

由于微信小程序是基于微信公众号的,因此登录接口的实现方式也与公众号登录接口类似。 以下是一个简单的微信小程序后端登录接口的Java实现: 1. 在微信公众平台中创建一个小程序,并获取其AppID和AppSecret。 2. 在后端Java代码中,使用微信提供的API获取用户的openid和session_key: ``` String appId = "your_appid"; String appSecret = "your_appsecret"; String jsCode = "user_js_code"; String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + appId + "&secret=" + appSecret + "&js_code=" + jsCode + "&grant_type=authorization_code"; URL obj = new URL(url); HttpURLConnection con = (HttpURLConnection) obj.openConnection(); con.setRequestMethod("GET"); int responseCode = con.getResponseCode(); if (responseCode == HttpURLConnection.HTTP_OK) { BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); JSONObject jsonObject = new JSONObject(response.toString()); String openid = jsonObject.getString("openid"); String sessionKey = jsonObject.getString("session_key"); } ``` 3. 将获取到的openid和session_key保存数据库中,并返回一个自定义的token给前端: ``` String token = "your_custom_token"; //将openid和session_key保存数据库中 //... return token; ``` 4. 前端将该token保存到本地存储中,在后续请求中带上该token向后端请求数据。 5. 后端在接收请求时,验证该token是否有效,如果有效则返回对应的数据,否则返回错误信息。 以上是一个简单的微信小程序后端登录接口的Java实现,可以根据实际需求进行修改和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值