我需要能够将图像和一些表单字段从客户端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