I am trying to create an image using DataURL of a Canvas (using JavaScript). When a user hits submit, the value gets sent to an Input type text tag (e.g., <input type='text'>
), however, apparently on Chrome, the text gets cut off when it is at length 524,288 characters.
I am sending it to an input tag because I need to obtain the value in PHP (as a $_POST['dataurltext'];), so that I can create an image and upload it to my web server.
Any ideas on how to bypass this length?
Should I use a comment box instead, maybe?
Thank you for any help, it will be greatly appreciated.
Try sending canvas
as Blob
at javascript
; use fopen()
with php://input
as parameter to read Blob
, stream_copy_to_stream
or file_get_contents()
, file_put_contents()
to process file at php
See 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 and $_FILE: Working with Blob in JavaScript and 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);
?>
来源:https://stackoverflow.com/questions/37491759/trying-to-pass-todataurl-with-over-524288-bytes-using-input-type-text