2017-09-27 178 views
0

通過html表單發送長文本字符串時遇到了一些麻煩。通過AJAX POST發送URI數據

我想將圖像數據發送到php頁面,可以處理數據並將其保存在MySQL中。

圖像數據例如:

數據:圖像/ GIF; BASE64,R0lGODlhEAAQAMQAAORHHOVSKudfO ..

的數據從剪貼板粘貼功能我有在頁面上的到來。

我在保存php頁面上的數據時沒有問題,但是將數據存入頁面會產生麻煩。

下面的腳本是一個我試圖使用從客戶端頁面發送數據:

formData = new FormData(); 
formData.append('imagedata','data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfO..'); 
$.ajax({ 
    url: "test.php?reportid=1", 
    type: "POST", 
    cache: false, 
    contentType: false, 
    processData: false, 
    data: formData 
}).done(function(e){ 
    alert(e); 
}); 

它工作正常,如果圖像尺寸雖小,但如果我得到上述250KB的圖像,它鬆動數據期間的數據。

也許有人有更好的方式將數據發佈到服務器?

+1

在php.ini中,什麼是upload_max_filesize&post_max_size? – waterloomatt

+0

都設置爲256M – Ramgaard

+0

而不是'data:formData'嘗試'data:「imagedata =」+ encodeURIComponent('data:image/gif; base64,R0lGODlhEAAQAMQAAORHHOVSKudfO ..')'。除此之外,你是否會隨機丟失數據或者是否限制了某個字節? – rndus2r

回答

0

我找到了一個傳輸數據的替代方案。

使用: https://stackoverflow.com/a/5100158/3176569轉換的base64編碼成團塊

function dataURItoBlob(dataURI) { 
    // convert base64/URLEncoded data component to raw binary data held in a string 
    var byteString; 

    if (dataURI.split(',')[0].indexOf('base64') >= 0) 
    byteString = atob(dataURI.split(',')[1]); 
    else 
    byteString = unescape(dataURI.split(',')[1]); 

    // separate out the mime component 
    var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0]; 

    // write the bytes of the string to a typed array 
    var ia = new Uint8Array(byteString.length); 

    for (var i = 0; i < byteString.length; i++) { 
    ia[i] = byteString.charCodeAt(i); 
    } 

    return new Blob([ia], { 
    type: mimeString 
    }); 
} 

我的代碼改成這樣:

formData = new FormData(); 
var blob = dataURItoBlob('data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfO..'); 

formData.append('imagedata', blob, 'temp.png'); 

var request = new XMLHttpRequest(); 
request.open("POST", "test.php?reportid=1"); 
request.send(formData); 

然後PHP頁面我通過$ _FILES接收數據上的[];

$file = $_FILES['imagedata']; 
$filetype = $file['type']; 
$blob = file_get_contents($file['tmp_name']); 

之後,我可以將它插入MySQL數據庫。

好吧,非常感謝您的回覆和建議:)

0

嘗試JSON.parse('data:image/gif; base64,R0lGODlhEAAQAMQAAORHHOVSKudfO ..');