我有一个音频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
答案 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。之后,只要您的数据不超过这些数据最大值,就不应该截断它。