我正在尝试通过Ajax上传文件。
var fd = new FormData();
fd.append('file', file);
var xhr = $.ajax({
url: 'https://www.mywebsite.com/it/file/upload/',
type: 'POST',
dataType: 'json',
data: fd,
cache: false,
contentType: "application/json; charset=utf-8"
processData: false,
success: function(result, message, xhr)
{
console.log(result);
}
});
目前,上传PHP脚本只显示文件数据
header('Content-Type: application/json');
echo json_encode($_FILES['file']);
die();
正如here所述,我被迫使用contentType:"application/json; charset=utf-8"
,因为contentType:false
导致404 (Not Found)
错误。不幸的是,这个解决方案避免了404错误,但显示的文件数据是null
。
你应该用它。它对我有用。
$.ajax({
type: 'POST',
url: $(this).attr('action'), //url_to_php_script
data: new FormData(this),
contentType: false,
processData: false,
success: function (data) {
//do necessary cleanups on success
},
error: function (e) {
//do necessary cleanups on failue
}
});
您将能够使用$_FILES
在PHP中上传图像
你的方式应该没问题,但是......
如果将contentType
设置为false,则强制jquery不为您设置内容类型。如果没有设置,它将默认为`application / x-www-form-urlencoded;字符集= UTF-8' 。
这意味着您使用url编码的字符串发送数据。您无法轻松地以url编码的字符串发送文件。
很可能是服务器端的方法设置为从URL读取表单参数。因此,如果将`contentType'设置为false,服务器将无法识别该URL,从而产生404。
尝试设置服务器方法以接受发布数据,删除url参数并从$_POST
和$_FILES
变量中读取发布的表单。
如果您无法弄清楚,请使用服务器的方法更新问题,以便我们了解该方法的设置方式。