真心吐槽一下微信小程序,上傳圖片竟然不支持多張一起傳。所以,沒辦法了,后端只能配合做單個單個上傳洛。
遇到的問題:如標題描述,后端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是行級鎖,應該問題不大~