加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用Ajax和PHP $_FILES从Canvas元素发送图像

发布时间:2020-12-16 01:35:46 所属栏目:百科 来源:网络整理
导读:我需要能够将图像和一些表单字段从客户端canvas元素发送到 PHP脚本,最后是$_POST和$_FILES.当我这样发送时: script type="text/javascript"var img = canvas.toDataURL("image/png");...ajax.setRequestHeader('Content-Type',"multipart/form-data; bounda
我需要能够将图像和一些表单字段从客户端canvas元素发送到 PHP脚本,最后是$_POST和$_FILES.当我这样发送时:
<script type="text/javascript">
var img = canvas.toDataURL("image/png");
...
ajax.setRequestHeader('Content-Type',"multipart/form-data; boundary=" + boundary_str);
var request_body = boundary + 'n' 
+ 'Content-Disposition: form-data; name="formfield"' + 'n' 
+ 'n' 
+ formfield + 'n' 
+ 'n' 
+ boundary + 'n'
+ 'Content-Disposition: form-data; name="async-upload"; filename="' 
+ "ajax_test64_2.png" + '"' + 'n' 
+ 'Content-Type: image/png' + 'n' 
+ 'n' 
+ img
+ 'n' 
+ boundary;
ajax.send(request_body);
</script>

$_POST和$_FILES都回填了,但$_FILES中的图像数据仍然需要解码如下:

$loc = $_FILES['async-upload']['tmp_name'];
$file = fopen($loc,'rb');
$contents = fread($file,filesize($loc));
fclose($file);
$filteredData=substr($contents,strpos($contents,",")+1);
$unencodedData=base64_decode($filteredData);

…为了将其保存为可读的PNG.这不是一个选项,因为我试图将图像传递给Wordpress的media_handle_upload()函数,该函数需要指向$_FILES的索引指向可读图像.我也无法相应地解码,保存和更改’tmp_name’,因为它违反了安全检查.

所以,我发现了这个:
http://www.webtoolkit.info/javascript-base64.html
并尝试在客户端进行解码:

img_split = img.split(",2)[1];
img_decoded = Base64.decode( img_split );

但由于某些原因,当它到达PHP时,我仍然没有一个可读的文件.
所以问题是:“为什么?”或者“我做错了什么?”或者“这有可能吗?”

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读