Я передаю данные base64 с помощью ajax в свою php-функцию, но для изображения большого размера Ajax не публикует данные. Но тот же код отлично работает для небольших изображений.
srcdata=data:image/jpeg;base64,/9j/4SxvRXhpZgAASUkqAAgAAAANAAABBAABAAAAwAwAAAEBBAABAAAALAcAAA8BAgAIAAAAqgAAABABAgARAAAAsgAAABIBAwABAAAABgAAABoBBQABAAAAxAAAABsBBQABAAAAzAAAACgBAwABAAAAAgAAADEBAgAMAAAA1AAAADIBAgAUAAAA4AAAABMCAwABAAAAAQAAAGmHBAABAAAA9AAAACWIBAABAAAA3gkAAPAJAABTQU1TVU5HAFNBTVNVTkctU0dILUk1MzcAAEgAAAABAAAASAAAAAEAAABJNTM3VUNVQ05DOQAyMDE0OjA2OjIyIDEwOjE3OjEwACEAmoIFAAEAAACGAgAAnYIFAAEAAACOAgAAIogDAAEAAAADAAAAJ4gDAAEAAAB9AAAAAJAHAAQAAAAwMjIwA5ACABQAAACWAgAABJACABQAAACqAgAAAZEHAAQAAAABAgMAAZIKAAEAAAC AgAAApIFAAEAAADGAgAAA/F//8L1QAAzfH//yRxAAENngAAFK4AAErK// giAABS/8AACRQAABVo8AAf/3AAB25wABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATv8AAf/2AACFNwABTv8AAf/2AACFNwABT5QAAf/2AACFXgABT5QAAf/ `
данные слишком велики, поэтому частично размещены,
Аякса
count = 1; name='test' jQuery.ajax({ url:"/createImage.php", data:{img_data:srcdata,img_id:count,name:name}, type:"POST", contentType:"application/x-www-form-urlencoded", success:function(result) { alert(result); } });
PHP
print_r($_POST); // is empty when logging..
Когда я пытаюсь получить данные сообщения в php, я становлюсь пустым. Что может быть причиной того, что ajax не отправляет данные при использовании base64.
Я согласен с TrueBlueAussie . Это похоже на настройку на стороне сервера в PHP.
Откройте файл php.ini
и найдите строку с upload_max_filesize
. По умолчанию он установлен в 2M, что составляет 2 МБ. Попробуйте увеличить его до 3 МБ и посмотреть, не по-прежнему ли вы получаете ошибку.
Примечание. Для этого вам потребуется перезапустить Apache / Nginx / webserver, чтобы повлиять на файл php.ini
.
Несмотря на то, что вы отправляете файл как переменную, application/x-www-form-urlencoded
может быть интерпретировано в PHP как фактическая загрузка файла. Другой параметр php.ini
вы можете взглянуть, будет post_max_size
который имеет значение по умолчанию 8M, что является максимальным значением, которое вы можете использовать POST для вашего PHP-скрипта.
Прежде всего: код, который вы укажете в base64, возвращает поврежденное изображение; при отправке кода в base64 используется функция encodeURIComponent, чтобы избежать ошибок при отправке.
Попробуйте этот код:
var srcdata = "data:image/jpeg;base64,/9j/4SxvRXhpZgAASUkqAAgAAAANAAABBAABAAAAwAwAAAEBBAABAAAALAcAAA8BAgAIAAAAqgAAABABAgARAAAAsgAAABIBAwABAAAABgAAABoBBQABAAAAxAAAABsBBQABAAAAzAAAACgBAwABAAAAAgAAADEBAgAMAAAA1AAAADIBAgAUAAAA4AAAABMCAwABAAAAAQAAAGmHBAABAAAA9AAAACWIBAABAAAA3gkAAPAJAABTQU1TVU5HAFNBTVNVTkctU0dILUk1MzcAAEgAAAABAAAASAAAAAEAAABJNTM3VUNVQ05DOQAyMDE0OjA2OjIyIDEwOjE3OjEwACEAmoIFAAEAAACGAgAAnYIFAAEAAACOAgAAIogDAAEAAAADAAAAJ4gDAAEAAAB9AAAAAJAHAAQAAAAwMjIwA5ACABQAAACWAgAABJACABQAAACqAgAAAZEHAAQAAAABAgMAAZIKAAEAAAC AgAAApIFAAEAAADGAgAAA/F//8L1QAAzfH//yRxAAENngAAFK4AAErK// giAABS/8AACRQAABVo8AAf/3AAB25wABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATv8AAf/2AACFNwABTv8AAf/2AACFNwABT5QAAf/2AACFXgABT5QAAf/ `"; var count = 1; var name = 'test'; $.ajax({ type: "POST", url: "./createImage.php", data: { img_data:srcdata, img_id:count, name:name }, cache: false, contentType: "application/x-www-form-urlencoded", success: function (result) { alert(result); } });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>