У меня есть аудиоблок, который я конвертирую в base64 и использую ajax, чтобы передать его на страницу php, чтобы его можно было сохранить на моем сервере sql. Но по какой-то причине я не получаю полный файл base64 в базе данных mysql.
Вот мой код для преобразования blob в base64:
var reader = new FileReader();
reader.readAsDataURL(blob);
reader.onloadend = function() {
base64data = reader.result;
//console.info(base64data);
tophp(ase64data);} // sending it to ajax function.
Теперь с помощью ajax передать его на php.
function tophp(sendtosql, base64data) {
console.info('ok');
console.info(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
Да, он также установлен на 64M
Итак, этот параметр ограничивает ваш пост. Вы должны увеличить его, чтобы получить все свои данные.
@Syscall, но я думаю, что размер моего файла вряд ли превышает 5 МБ
@PatrickEvans О да! Простите...
Уведомление: ваш код содержит уязвимость SQL-инъекции: $audio = $_POST['blob']; $sql = "INSERT INTO voice (audi) VALUES( '" . $audio . "')";
@DanielO Да, я знаю. Это просто для мелочей.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Все типы данных столбцов в 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^16MEDIUMBLOB, MEDIUMTEXT L + 3 bytes, where L < 2^24LONGBLOB, LONGTEXT L + 4 bytes, where L < 2^32
Таким образом, поскольку ваш образец данных составляет примерно 650 КБ, он больше, чем максимальный размер BLOB-объекта, равный 64 КБ, поэтому он усекается.
Измените тип данных на тот, который имеет больший максимальный размер, например MEDIUMBLOB или LONGBLOB. После этого, пока ваши данные не превышают максимальные размеры данных, их не следует усекать.
Вы проверяли
post_max_sizeв своем php.ini? Кажется, ограничено 64 МБ.