Проблема с плагином Wordpress, отправляющим данные изображения base64 через Ajax - ошибки 400/404/500 - PullRequest
0 голосов
/ 08 мая 2019

Я разрабатываю плагин для WordPress, чтобы клиенты могли создавать собственные футболки с возможностью загрузки своих собственных изображений.Плагин делает несколько скриншотов и отправляет их по электронной почте в отдел печати. ​​

В Javascript я конвертирую скриншоты в данные base64, которые затем отправляются через Ajax в файл PHP, это создает папку для дизайна клиента, создаетизображения из данных и хранят там скриншоты.

Большинство данных скриншотов / base64 передаются очень хорошо, например, простое добавление в текст не создает проблем.Однако, если пользователь загружает изображение и его масштабирование слишком велико, это вызывает различные ошибки (иногда ошибка 400, иногда 404, а иногда и 500).

Выполнение этого через мою локальную настройку в Windows с Wamp, это нормально.Я могу загружать изображения и масштабировать их до 12x без проблем.Однако, когда я пытаюсь сделать это с живым сайтом, у меня возникают вышеуказанные проблемы, если я масштабирую любое из изображений после 4x, и с большинством изображений это происходит, если я даже пытаюсь увеличить их вообще за 1x.

Разрешение / размер файла изображения, кажется, оказывает влияние, хотя и не очевидным образом.Я могу отправить огромный простой красный квадрат или обычное изображение в масштабе 1x.

Сначала я подумал, что это проблема с лимитом данных POST, за исключением того, что предел POST для живого сайта в два раза больше, чем тот, который я установил на своем WAMPНастройка, которая не имеет этой проблемы.

Кроме того, и даже незнакомец.Я протестировал загрузку изображения, но заменил данные base64 простыми символами (таким образом, увеличенное изображение существует на странице, но его данные base64 не отправляются через POST), и у меня все еще остается та же проблема.Так что я не думаю, что это простая проблема с лимитом POST.

Не могу найти решения этой проблемы, любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 16 мая 2019

Обдумав это, я дам свое решение на тот случай, если кто-то еще столкнется с такой же проблемой и столкнется с этим сообщением.

По сути, я преобразовал данные изображения base64 в большой двоичный объект и добавил его внедавно созданный объект formData.Я обнаружил, что добавление моего nonce и action (измененного для работы с способом admin-ajax по использованию AJAX) к formData помогло решить большинство проблем на стороне javascript.В запросе AJAX я установил для processData и contentType значение false.

Что касается стороны PHP, я установил переменную, равную конкретному элементу массива $ _FILES, который я только что отправил.Я использовал file_get_contents () для этой переменной (то есть данных BLOB-объектов) и обернул это в file_put_contents () для фактической записи изображения.

Это быстрая версия.Если кому-то нужно более подробное объяснение, дайте мне знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...