我們都知道移動端是和服務端分離的,前臺後臺井水不犯河水,只通過異步ajax來傳輸數據,尤其是微信小程序和WEBAPP,因此不能直接通過調用PHP代碼的方式來完成圖片上傳,因此這時就需要通過先將圖片轉化爲BASE64的格式
var fr = new FileReader();
//成功處理
fr.onload = function(e) {
//這裏是圖片的base64字符串
console.log(e.target.result.length);
$('#im').attr("src",e.target.result);
console.log(e.target.result);
};
//失敗處理
fr.onerror = function() {
}
fr.readAsDataURL(ob.files[0]);
並且以post方式提交到後臺,這時後臺共有三種方式來存儲圖片
1.直接存儲base64的內容到數據表中
這種方法是最直接和簡單的,將base64轉換爲blob形式,直接存入數據庫,但這樣會大大浪費數據庫資源和運行速度。
2.後端接到base64數據後轉換爲圖片並存在服務器文件中,數據庫中只存儲圖片的URL
大大節省了服務器的資源,並且前臺<img >標籤可以直接通過src賦值爲網絡地址來顯示這張圖片
$base64=input('post.base',"","strval"); echo strlen($base64); preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64, $result); $type = $result[2]; //獲取圖片的類型jpg png等 echo $type; $name = "xxxx.".$type;//圖片重命名 $savepath = "路徑".$name; //圖片保存目錄 file_put_contents($savepath, base64_decode(str_replace($result[1], '', $base64))); //對圖片進行解析並保存
3.大型雲存儲網盤(例如七牛雲)
當圖片數量特別多時,存在服務器中就會導致服務器負載過重,這是我們可以採取雲盤存取的方式,註冊七牛雲網盤後,可以將圖片直接存進七牛雲網盤,並且返回一個網絡地址,將這個網絡地址存入數據表中即可