使用ajax

时间:2018-03-11 18:52:02

标签: javascript php mysql ajax base64

我有一个音频blob,我正在转换为base64并使用ajax将其传递给php页面,以便它可以存储在我的sql server上。但由于某种原因,我没有在mysql数据库中收到完整的base64文件。

以下是我将blob转换为base64的代码:

var reader = new FileReader();
reader.readAsDataURL(blob); 
reader.onloadend = function() {
base64data = reader.result;                
//console.log(base64data);
tophp(ase64data);}  // sending it to ajax function.

现在使用ajax将其传递给php。

function tophp(sendtosql, base64data) {
console.log('ok');
console.log(base64data);
    $.ajax({
data: 'blob=' + encodeURIComponent(base64data),
cache: false,
processData: false, 
contentType: "application/x-www-form-urlencoded",
url: 'http://localhost/Voice/view_notification.php',
method: 'POST', // or GET
success: function(msg) {
       alert(msg);
                }
});
 }

最后用php插入数据库:

<?php
 echo $_POST['blob'];
 $audio = $_POST['blob'];
 $sql = "INSERT INTO voice (audi) VALUES( '" . $audio . "')";
 mysqli_query($conn, $sql);
 ?>

数据被插入到mysql表中但是当我将表数据与我原来的base64数据(我从blob获得到base64转换)进行比较时,我得不到相同的结果,从而影响我的音频文件。 / p>

我检查了php.ini文件中的上传限制。它设置为64Mb,所以没有问题。另外,我试图在mysql表中将数据类型从TEXT更改为BLOB。仍然没有效果。

这是我从blob转换中获得的示例base64。 Sample base64

1 个答案:

答案 0 :(得分:1)

Mysql中的所有列数据类型都有大小限制。在blob类型的情况下,它们是

  

https://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html#data-types-storage-reqs-strings

BLOB, TEXT               L + 2 bytes, where L < 2^16 
MEDIUMBLOB, MEDIUMTEXT   L + 3 bytes, where L < 2^24 
LONGBLOB, LONGTEXT       L + 4 bytes, where L < 2^32

因此,由于您的样本数据大约为650kb,因此它大于64KB的BLOB最大大小,因此会被截断。

将数据类型更改为最大大小的数据类型,例如MEDIUMBLOB或LONGBLOB。之后,只要您的数据不超过这些数据最大值,就不应该截断它。