jquery異步ajax超大長度base64圖片長字段數據傳輸問題解決辦法和php后台處理辦法


2017年5月9日19:25:02

 

在做在線簽名的時候,到了圖片上傳的時候,使用jquery異步ajax上傳base64的圖片數據的時候,使用默認的方式進行數據傳輸偶爾會出現

生產的圖片只有上半部分,開始以為是jsignature生成圖片的問題,但是吧base64的數據放在js里面的時候,每次都沒問題,才發現是ajax的參數長度有問題

 

var datapair = $("#signature").jSignature("getData", "image");
var i = new Image();
i.src = "data:" + datapair[0] + "," + datapair[1]; //js版本需要的數據格式
i.image = datapair[1];//php需要數據格式

$.ajax({ url:
"/app.php?m={$Think.MODULE_NAME}&a={$Think.ACTION_NAME}", data: { data: i.image, identify: "{$identify}", }, type: 'post', cache: false, success: function (msg) { if (msg.code === 1) { } else { } } });

這就是一般的js傳送數據,但是i.image的是base64格式,長度會非常大,會斷掉,所以出現部分圖片下半截亂碼

 

使用ajax的json數據傳輸就可以避免這個問題,其實也不僅限於base64圖片字段,其他也可以但是需要使用urlencode只有在傳輸,不然會亂碼

 

js部分

              $.ajax({
                    url: "/app.php?m={$Think.MODULE_NAME}&a={$Think.ACTION_NAME}",
                    dataType: "json",
                    data: "{\"identify\":\"" + requestTag + "\",\"image_data\":\"" + encodeURIComponent(i.image) + "\"}",
                    type: "post",
                    cache: false,
                    success: function (msg) {
                        if (msg.code === 1) {
                            layer.msg('上傳成功');
                        } else {
                            layer.msg('上傳失敗,請再次簽名!');
                        }
                    }
                });

需要注意下的幾個細節

  1. contentType: 告訴服務器,我要發什么類型的數據
  2. dataType:告訴服務器,我要想什么類型的數據,如果沒有指定,那么會自動推斷是返回 XML,還是JSON,還是script,還是String。
  3. Accept:告訴服務器,能接受什么類

data里面一定是可以正常解析的json格式數據不然,后台不能解析,或者出錯,數據里面的雙引號,最好全部都完成保持,轉義

i.image必須encode,不然接受也可能出問題


后台php接受處理部分

$image_data = json_decode(file_get_contents('php://input'), true); //只能這接收
可能是緩沖區有什么其他拋過來的數據

使用$_POST接收的是一個很奇怪的數據,無法解析的數組,注意是數組不是字符串,所以有點奇怪,還有為什么json數據傳輸不會因為太長而截斷,有時間在測試下
大文件的base64上傳試試,$_GET也是一樣的情況

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM