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

问题描述 投票:0回答:2

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

php jquery ajax form-data
2个回答
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中上传图像


0
投票

你的方式应该没问题,但是......

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

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

很可能是服务器端的方法设置为从URL读取表单参数。因此,如果将`contentType'设置为false,服务器将无法识别该URL,从而产生404。

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

如果您无法弄清楚,请使用服务器的方法更新问题,以便我们了解该方法的设置方式。

© www.soinside.com 2019 - 2024. All rights reserved.