Пытается передать ToDataURL более чем 524288 байт. Используя текст типа ввода

Я пытаюсь создать изображение, используя DataURL Canvas (используя JavaScript). Когда пользователь нажимает «Отправить», значение отправляется в текстовый тег типа ввода (например, <input type='text'> ), однако, по-видимому, в Chrome текст обрезается, когда длина его составляет 524 288 символов.

Я отправляю его во входной тег, потому что мне нужно получить значение в PHP (как $ _POST ['dataurltext'];), чтобы я мог создать изображение и загрузить его на свой веб-сервер.

Любые идеи о том, как обойти эту длину?

Должен ли я использовать поле комментариев вместо, может быть?

Спасибо за любую помощь, мы будем очень благодарны.

Попробуйте отправить canvas как Blob в javascript ; используйте fopen() с параметром php://input качестве параметра для чтения Blob , stream_copy_to_stream или file_get_contents() , file_put_contents() для обработки файла на php

См. HTMLCanvasElement.toBlob()

 if (!HTMLCanvasElement.prototype.toBlob) { Object.defineProperty(HTMLCanvasElement.prototype, 'toBlob', { value: function (callback, type, quality) { var binStr = atob( this.toDataURL(type, quality).split(',')[1] ), len = binStr.length, arr = new Uint8Array(len); for (var i=0; i<len; i++ ) { arr[i] = binStr.charCodeAt(i); } callback( new Blob( [arr], {type: type || 'image/png'} ) ); } }); } 

Beyond $ _POST, $ _GET и $ _FILE: Работа с Blob в JavaScript и PHP

 <?php // choose a filename $filename = "hello.json"; // the Blob will be in the input stream, so we use php://input $input = fopen('php://input', 'rb'); $file = fopen($filename, 'wb'); // Note: we don't need open and stream to stream, we could've used file_get_contents and file_put_contents stream_copy_to_stream($input, $file); fclose($input); fclose($file); ?>