PHP傳輸base64數(shù)據(jù)不完整的解決方法
前言
最近在做OCR增值稅務(wù)處理時,接口是通過圖片轉(zhuǎn)base64提交處理然后返回數(shù)據(jù)的,我通過前端將圖片轉(zhuǎn)換為base64提交到后端接收時,通過在線工具進行測試,發(fā)現(xiàn)傳遞過去的數(shù)據(jù)可以使用,接收到的數(shù)據(jù)卻提示損壞
解決辦法
將
<?php header('Content-Type: text/html; charset=utf-8'); header('Access-Control-Allow-Origin: *'); // 允許任何網(wǎng)址請求 header('Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE'); // 允許請求的類型 header('Access-Control-Allow-Credentials: true'); // 設(shè)置是否允許發(fā)送 cookies header('Access-Control-Allow-Headers: Content-Type, Content-Length, Accept-Encoding, X-Requested-with, Origin'); // 設(shè)置允許自定義請求頭的字段 // 接收POST數(shù)據(jù) $base64=$_POST['base'];
替換為以下代碼:
<?php header('Content-Type: text/html; charset=utf-8'); header('Access-Control-Allow-Origin: *'); // 允許任何網(wǎng)址請求 header('Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE'); // 允許請求的類型 header('Access-Control-Allow-Credentials: true'); // 設(shè)置是否允許發(fā)送 cookies header('Access-Control-Allow-Headers: Content-Type, Content-Length, Accept-Encoding, X-Requested-with, Origin'); // 設(shè)置允許自定義請求頭的字段 // 接收POST數(shù)據(jù) $postData = file_get_contents('php://input'); $base64=urldecode($postData); $new_base64 = substr($base64, 27);
即可解決
拓展知識
BASE64解碼后的圖片顯示不完整問題
BASE64解碼后的圖片顯示不完整
從前端獲取base64信息就后用以下代碼進行處理,發(fā)現(xiàn)解析出來的圖片會損壞。
StringBuffer filePathStr=new StringBuffer(); for(int i=0;i<fileList.size();i++){ JSONObject fileObj = fileList.getJSONObject(i); if(null!=fileObj){ String fileContent=fileObj.getString("FileContent"); String fileName=fileObj.getString("FileName"); //Base64解碼 byte[] bytes=Base64.decodeBase64(fileContent); for (int j = 0; j < bytes.length; ++j) { if (bytes[j] < 0) {// 調(diào)整異常數(shù)據(jù) bytes[j] += 256; } }
導(dǎo)致?lián)p壞可能為以下原因
一:需要去掉如下頭部信息。
二:
因為ajax在傳輸過程中加號會變成空格而base64里是有加號的,所以在ajax傳輸前先要對base64進行編碼,把加號替換成%2B的url編碼。
var img = imageData.replace(/+/g,"%2B");
imageData就是原始的base64碼
以上就是PHP傳輸base64數(shù)據(jù)不完整的解決方法的詳細內(nèi)容,更多關(guān)于PHP base64數(shù)據(jù)不完整的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
淺談ThinkPHP中initialize和construct的區(qū)別
下面小編就為大家?guī)硪黄獪\談ThinkPHP中initialize和construct的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04