JavaScript не получает полные данные в кодировке base64 с помощью ajax

У меня есть аудио-блоб, который я конвертирую в 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

0

Решение

Все типы данных столбца в 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. После этого, пока ваши данные не превышают максимальный размер данных, их не следует усекать.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector