javascript - Ajax上传文件: $_FILES is empty but files exists in request header

标签 javascript php jquery file-upload form-data

当用户将文件拖放到页面上时,我正在使用 formdata 上传文件。客户端一切正常,文件详细信息存在于请求 header 中,但是当我 print_r($_FILES) 时,它返回一个空数组。未设置服务器端限制。我确实通过手动上传文件进行了测试。

请求详细信息:https://www.dropbox.com/s/tfta4ulqlxsaism/csz.PNG

js代码:

$('html').live('drop', function(e)
    {
       try
        {
            e.stopPropagation();
            e.preventDefault();
            var files = e.originalEvent.dataTransfer.files || e.target.file || e.dataTransfer.files;
            var file;
            var len = files.length;
            var i =0;
            var formdata = new FormData();
            for ( ; i < len; i++ ) {
                file = files[i];
                if ( window.FileReader ) {
                    reader = new FileReader();
                    reader.onloadend = function (e) { 
                        $('html').removeClass('hover');
                    };
                    reader.readAsDataURL(file);
                }

                if (formdata) {
                    formdata.append("files[]", file);
                }       
            }
            if (formdata) 
            {
                $.ajax({
                    url: base_url+"/kh/site/file/upld",
                    type: "POST",
                    data: formdata,
                    processData: false,
                    contentType: false,
                    success : function(res){
                        console.log(res);
                    },
                    error: function(res){
                        console.log(res);
                    }
                });
            }
            return false;
        }catch(a){console.log(a.message);}     
    });

PHP 代码:

<?php print_r($_FILES); ?>

我缺少什么?

提前致谢!

最佳答案

我遇到了完全相同的问题,事实证明这不是 AJAX 错误。对于 PHP,上传不仅受到 upload_max_filesize 的限制。在服务器上配置上传参数时请考虑以下 ini:

max_execution_time:如果您将 upload_max_filesize 设置为 100mb,并且脚本的 max_execution_time 为 5 秒,服务器很可能会返回 404 或 500。

max_input_time:您希望该值足够高,以便完成完整上传,具体取决于upload_max_filesize。现在的互联网连接有很大的下载带宽,但上传却有问题。

post_max_size:根据定义,上传过程是一个 $_POST 请求,因此如果 upload_max_filesize 的值为 100mb,则不能有 post_max_size 值较低。嗯,实际上可以,但是上传时,如果总上传大小在 post_max_sizeupload_max_filesize 之间,$_FILES 仍然为空。

关于javascript - Ajax上传文件: $_FILES is empty but files exists in request header,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23705796/

相关文章:

javascript - 如何将参数从javascript传递给less

php - 如何使用 php 将 docx 文档转换为 html?

php - 在页面加载时将变量从 PHP 传递到 jQuery

javascript - 如何在javascript中使用if条件来处理json?

javascript - 图像移动不流畅,图像移动缓慢

javascript - 单击显示 div,其余背景模糊

javascript - 如何隐藏不包含文本的 DOM 元素?

php - 平表到 TreeView

javascript - 使剪贴板复制粘贴在 iphone 设备上工作

javascript - 使用 .trigger() 模拟多个按键;