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

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

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

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

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

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

1

Решение

Попробуйте отправить 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'} ) );
}
});
}

Помимо $ _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);

?>
0

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

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

По вопросам рекламы [email protected]