base64編碼的圖片如何存入數據庫


base64編碼的圖片存入數據庫的地址爲服務器,如果前端獲取不到base64編碼的話,需要把圖片路徑轉換成文件,再把File文件轉成base64,發送給後臺,接口獲取文件流,轉成文件放在服務器地址,然後獲取服務器的地址再存入數據庫。
在這裏插入圖片描述

前端JS:

/**拍照
 * @param {Object} c
 * @param {Object} d
 */
var base64src="";//全局變量
var upload = function(c, d) {
	"use strict";
	var $c = document.querySelector(c),
		$d = document.querySelector(d),
		file = $c.files[0],
		picPath = $c.value,
		reader = new FileReader();
		
	reader.readAsDataURL(file);
	reader.onload = function(e) {
		$d.setAttribute("src", e.target.result);
		base64src = e.target.result;//獲取base64編碼的字符串
	};
};

獲取到的base64編碼如圖,(特別長)
在這裏插入圖片描述

FileReader 是H5提供的一個處理文件的API
FileReader對象的方法如下:

readAsBinaryString(file): 這個方法將blob對象或文件中的數據讀取爲二進制字符串,通常我們將它傳送到服務器端,服務器端可以通過這段字符串存儲文件。
readAsText(file,encoding): 以純文本形式讀取文件,將讀取到的文本保存在result屬性中,第二個參數用於指定編碼類型,可選的。
readAsDataURL(file): 讀取文件並將文件以數據URL的形式保存在result屬性中。
readAsArrayBuffer(file): 讀取文件並將一個包含文件內容的ArrayBuffer保存在result屬性中。

FileReader對象的事件如下:

onabort:  數據讀取中斷時觸發、 
onerror: 數據讀取出錯時觸發、
onloadstart: 數據讀取開始時觸發、 
onprogress: 數據讀取中、
onload:數據讀取成功完成時觸發、
onloadend: 數據讀取完成時觸發,無論成功或失敗。

注意:重點內容
FileReader 讀取後的文件不會返回給FileReader 本身, 而是存儲在了 result 中

後端代碼:

	//1,獲取到後面的數據
	String base64src=request.getParameter("base64src");
	String base64=base64src.split(",")[1];//通過base64來轉化圖片,去掉圖片頭(data:image/jpg;base64,)
	
	//2,解碼成字節數組
	byte[] result=BASE64.decode(new String(base64));
	
	//3,字節流轉文件
	String uuid=FileUtils.getUUID();//uuid作爲保存時的文件名
	
	File picfilepath=new File(BaseConfig.webPath+"upload/kq/"+uuid+".png");//保存文件
	File filepath=new File(BaseConfig.webPath+"upload/kq/");//創建文件夾
	if(!filepath.exists()){//如果沒有文件夾,新建
		filepath.mkdirs();
	}
	try{
		FileOutputStream out=new FileOutputStream(picfilepath);
		out.write(result);
		out.close();
	}catch(Exceptione){
		e.printStackTrace();
	}

1/後端接收前端傳入的數據顯示
在這裏插入圖片描述
2/走完流程,成功存儲到服務器的路徑下
在這裏插入圖片描述
3/獲取服務器地址存入數據庫表
在這裏插入圖片描述

問題:post方法上傳 base64編碼的圖片傳到後端爲null

原因:base64編碼的圖片太大了,post請求理論上對參數的大小沒有限制,但是服務器有限制,把Tomcat的server.xml裏設置一下就好了


Tomcat的版本低於等於7,設置maxPostSize=“0” 表示post參數無限大
Tomcat的版本大於等於8,設置maxPostSize=“104857600” 表示post參數最大100MB
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章