编程语言
首页 > 编程语言> > php – 尝试使用输入类型文本传递超过524288字节的ToDataURL

php – 尝试使用输入类型文本传递超过524288字节的ToDataURL

作者:互联网

我正在尝试使用Canvas的DataURL(使用JavaScript)创建图像.当用户点击提交时,该值将被发送到输入类型文本标记(例如,< input type ='text'>),但是,显然在Chrome上,当文本长度为524,288个字符时,文本会被截断.

我将它发送到输入标签,因为我需要获取PHP中的值(作为$_POST [‘dataurltext’];),以便我可以创建一个图像并将其上传到我的Web服务器.

关于如何绕过这个长度的任何想法?

我应该使用评论框吗?

感谢您的帮助,我们将不胜感激.

解决方法:

尝试在javascript上以Blob形式发送画布;使用fopen()与php://输入作为参数读取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 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);

?>

标签:php,jquery,input,canvas,todataurl
来源: https://codeday.me/bug/20190925/1817015.html