我需要能够将图像和一些表单字段从客户端canvas元素发送到
PHP脚本,最后是$_POST和$_FILES.当我这样发送时:
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);
$_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’,因为它违反了安全检查.
img_split = img.split(",",2)[1];
img_decoded = Base64.decode( img_split );
但由于某些原因,当它到达PHP时,我仍然没有一个可读的文件.
所以问题是:“为什么?”或者“我做错了什么?”或者“这有可能吗?” 🙂
非常感谢任何帮助!
谢谢,
凯恩