我需要能够将图像和某些表单字段从客户端画布元素发送到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时,我仍然没有得到可读的文件。所以问题是:“为什么?” 或“我在做什么错?” 或“这甚至有可能吗?” :-)
任何帮助非常感谢!
谢谢,凯恩
基于Nathan的出色回答,我能够对其进行定位,以便它仍通过jQuery.ajax进行。只需将其添加到ajax请求中即可:
xhr: function () {
var myXHR = new XMLHttpRequest();
if (myXHR.sendAsBinary == undefined) {
myXHR.legacySend = myXHR.send;
myXHR.sendAsBinary = function (string) {
var bytes = Array.prototype.map.call(string, function (c) {
return c.charCodeAt(0) & 0xff;
});
this.legacySend(new Uint8Array(bytes).buffer);
};
}
myXHR.send = myXHR.sendAsBinary;
return myXHR;
},
基本上,您只是返回一个被覆盖的xhr对象,因此“ send”表示“ sendAsBinary”。然后jQuery做正确的事情。
问题内容: 我要尝试做的就是从服务器中搜索文件并显示图片。HTML有一个简单的搜索栏,您可以输入搜索词。JavaScript使用ajax请求来调用PHP文件,然后PHP在服务器上找到图像并将其发送回以显示。 现在发生的是该图像没有显示,并且我得到一个图标,指示一些无效的图像。Ajax调用似乎正在运行,但是我认为我发回的数据不正确。我一直在尝试搜索它,但是每个人似乎对如何执行它都有不同的看法,这有点
问题内容: 我的问题是可以使用ajax(jquery)将图像上传到服务器吗 以下是我的ajax脚本,无需重新加载页面即可发送文本 是否可以修改它以发送图像? 问题答案: 这可行。 是您要找的东西吗?
问题内容: 我想以json格式向php发送一些数据,并在php中进行一些操作。我的问题是我无法通过Ajax将json数据发送到我的php文件。请帮助我该怎么做。我已经尝试过这种方式.. 在PHP中,我使用: 在php文件中添加print_r($ _ POST)时,它在firebug中显示array(0){}。 问题答案: 输了。您没有将JSON发送到服务器,而是发送了普通的POST查询(恰好包含J
我正在开发一个使用Akka Http和Akka流的客户机-服务器应用程序。主要思想是服务器必须使用来自Akka Streams的源来提供http响应。 问题是服务器在向客户机发送第一条消息之前积累了一些元素。但是,我需要服务器在源生成新元素时立即发送元素到元素。 我同时获得所有元素,而不是每2秒接收一个元素。 有什么想法可以“强制”服务器发送每个元素,因为它是从源头出来的吗?
问题内容: 问题 因此,一段时间以来,我一直在尝试使用不同的AJAX方法将数据发送到将要处理并存储在MySQL数据库中的服务器。 AJAX请求命中的页面使用PHP的PDO准备好的语句来保存数据,因此MySQL注入并不是真正的问题,还需要处理密码或需要加密的数据,这不是我要的这里。我的问题更多地涉及从客户端传输到服务器时如何确保数据的安全性。 方法 我目前有(对于下面包含的登录示例): 域上运行的S
我正在尝试使用MultipartEntityBuilder和HttpURLConnection向服务器发送一个映像,然后接收一个字符串答案(现在它使用http协议,但我将使用此代码或非常类似的代码使用https来完成)。但当我按下按钮发送时,应用程序崩溃了,而logcat没有告诉我任何关于捕获的信息。下一个代码来自我执行此操作的类: 我试图解决这个问题:从浏览器下载包,然后将其粘贴到库中的文件夹/