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

前端之家收集整理的这篇文章主要介绍了使用Ajax和PHP $_FILES从Canvas元素发送图像前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要能够将图像和一些表单字段从客户端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时,我仍然没有一个可读的文件.
所以问题是:“为什么?”或者“我做错了什么?”或者“这有可能吗?” 原文链接:https://www.f2er.com/ajax/159896.html

猜你在找的Ajax相关文章