AjaX文件上传出错:上传的文件为空

时间:2017-07-23 09:50:41

标签: php jquery ajax form-data

我正在尝试通过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

2 个答案:

答案 0 :(得分:0)

你应该使用它。它对我有用。

$.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中上传图片

答案 1 :(得分:0)

你应该按照自己的方式行事,但是......

如果将contentType设置为false,则强制jquery不为您设置内容类型。如果没有设置,它将默认为`application / x-www-form-urlencoded;字符集= UTF-8'

这意味着您使用网址编码字符串发送数据。 您无法轻松地以网址编码字符串发送文件。

很可能服务器端的方法设置为从URL读取表单参数。因此,如果你设置`contentType'为假,服务器不会识别网址,导致404。

尝试设置服务器方法以接受帖子数据,删除网址参数并从$_POST$_FILES变量中阅读发布的表单。

如果您无法解决问题,请使用服务器更新问题'方法,以便我们可以看到该方法是如何设置的。