1. 程式人生 > >前臺傳base64格式的圖片,後臺來接受處理.

前臺傳base64格式的圖片,後臺來接受處理.

1.首先你得知道前臺傳的是什麼玩意.

<body>
	<input type="file" id="image"><br/>
	<div id="div"></div>
</body>
<script type="text/javascript" src="juqery-1.8.3.js"></script>
<script type="text/javascript">
	//給file新增一個事件,當選擇了檔案後,執行下面uploadFile的方法
	$("#image").bind("change", function() {
		uploadFile($(this));
	});
	//通過onChange直接獲取base64資料
	function uploadFile(file) {
		var reader = new FileReader();
        var allowImgFileSize = 2100000; //上傳圖片最大值(單位位元組)( 2 M = 2097152 B )超過2M上傳失敗
        var file = $("#image")[0].files[0];
        var imgUrlBase64;
        if (file) {
            //將檔案以Data URL形式讀入頁面  
            imgUrlBase64 = reader.readAsDataURL(file);
            reader.onload = function (e) {
              //var ImgFileSize = reader.result.substring(reader.result.indexOf(",") + 1).length;//擷取base64碼部分(可選可不選,需要與後臺溝通)
              if (allowImgFileSize != 0 && allowImgFileSize < reader.result.length) {
                    alert( '上傳失敗,請上傳不大於2M的圖片!');
                    return;
                }else{
                    //將轉碼後的資料展示出來
                    $("#div").html(reader.result)//data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/
                }
            }
         }  
	}
</script>

前臺最終轉的結果是:data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/......是這樣的.也就是說

data:+檔案格式+";"+base64+","+核心資料.

取到了轉碼後的資料,那麼傳給後臺,後臺怎麼解決呢?

2.後臺怎麼解析Base64

其實這跟後臺不後臺沒有什麼關係,關鍵是你得理解什麼是base64,什麼是檔案.

base64只是位元組的編碼方式.檔案是位元組的資料集.

想要轉成檔案,那麼就只需要解碼成位元組陣列,然後通過位元組流寫成檔案即可.如下圖程式碼,

/**
		 * 1.獲取到後面到資料
		 */
		String data = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD....";
		String base64Data =  data.split(",")[1];
		/**
		 * 2.解碼成位元組陣列
		 */
		Decoder decoder = Base64.getDecoder();
		byte[] bytes = decoder.decode(base64Data);
		/**
		 * 3.位元組流轉檔案
		 */
		FileOutputStream fos = null;
				try {
					fos = new FileOutputStream("E:\\aaa.jpg");
					fos.write(bytes);
					return name;
				} catch (IOException e) {	
					e.printStackTrace();
				} finally {
					if (fos != null){
						try {
							fos.close();
						} catch (IOException e) {
							e.printStackTrace();
						}
					}
				}	

即可.