Ajax上传文件:$ _FILES为空,但文件存在于请求标头中

时间:2014-05-16 23:07:30

标签: javascript php jquery file-upload form-data

当用户在页面上删除文件时,我使用formdata上传文件。在客户端一切正常,文件详细信息存在于Request标头中,但是当我打印__($ _ 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); ?>

我缺少什么?

提前致谢!

2 个答案:

答案 0 :(得分:1)

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

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_size降低。好吧,实际上你可以,但在上传时,如果总上传量大小介于upload_max_filesize和{{1}}之间,则$ _FILES仍为空。

答案 1 :(得分:-1)

2个原因 你需要一次附加1个文件

  formData.append( 'fileName', fileData);
  fileName[] -- will not work

添加现金:假

    $.ajax({
         type: "POST",

         url: url,
         data:formData,
         **cache: false,**
         contentType: false,
         processData: false

你也可能有错误的dropZone配置     Dropzone.options.myAwesomeDropzone = {

  url: "post_ad.php",
  method: "post",
  **enctype:"multipart/form-data",**
  paramName: "files",
  addRemoveLinks: true,
  autoProcessQueue: false,
  **uploadMultiple: true,**
  parallelUploads: 100,