我正在尝试处理来自prototype.js Ajax请求的文件,但它无法正常工作。数据没有进入控制器($ _FILES)。
我在mapto的Checkout中添加了一个步骤,并希望上传文件以转到下一步。
我也试过下面的代码。
var request = new Ajax.Request(
this.saveUrl,
{
method: 'post',
requestHeaders: {"X-Prototype-Version": null},
contentType: 'multipart/form-data',
onComplete: this.onComplete,
onSuccess: this.onSave,
onFailure: checkout.ajaxFailure.bind(checkout),
postBody: formData,
}
);
请在这里帮助我。
答案 0 :(得分:0)
很抱歉告诉你,但是通过ajax上传文件并不容易。
通过ajax发布时,会跳过文件输入字段,或者只获取文件名(而不是文件数据)。
有一种方法可以发送二进制数据 - 但它需要采用不同的方法。
使用HTML5文件/ FileReader API,您可以在javascript中读取文件,然后将文件内容作为请求的正文。
new Ajax.Request('/url.php?rawupload=1&id='+$F('id')+'&label='+label,
{
'method':'post',
'postBody':fileobject,
'onSuccess':function() { alert('success'); }
});
您需要将表单字段放入GET参数中,以便将它们传递给PHP脚本。
在PHP脚本中,文件内容将像这样
$file = file_get_contents('php://input');
$file
将包含您上传文件的内容,您可以将其写入文件系统或阅读内容等。