У меня есть аудио-блоб, который я конвертирую в base64 и использую ajax для передачи его на страницу php, чтобы он мог храниться на моем сервере sql. Но по какой-то причине я не получаю полный файл base64 в базе данных mysql.
Вот мой код для преобразования 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), я не получаю те же результаты и, таким образом, влияю на мой аудиофайл.
Я проверил лимит загрузки в php.ini
файл. Он установлен на 64 МБ, так что никаких проблем нет. Кроме того, я попытался изменить тип данных с TEXT на BLOB в таблице MySQL. По-прежнему никакого эффекта.
Это образец base64, который я получил от преобразования BLOB-объектов.
Образец base64
Все типы данных столбца в 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
Так как ваш пример данных составляет примерно 650 КБ, он больше, чем максимальный размер BLOB-объекта 64 КБ, поэтому он усекается.
Измените тип данных на тот, который имеет больший максимальный размер, такой как MEDIUMBLOB или LONGBLOB. После этого, пока ваши данные не превышают максимальный размер данных, их не следует усекать.
Других решений пока нет …