FormData发送文件,但$ _FILE为空

时间:2013-05-14 14:50:43

标签: php file xmlhttprequest multipartform-data form-data

我不知道为什么我打印出来的时候会一直得到一个空的$ _FILES全局数组。我一直在看它,但我看不出我错在哪里。因为我已经显示了所有的代码。 如果我使用按钮它到达服务器就好了,一切顺利。但如果我使用拖放,那么我在服务器上没有文件?任何想法为什么?当我打印数组时,它是数组(0)。

我发现while循环存在一个问题,我现在修复了没有文件的问题。 只是因为人们想知道后期行动是否正确。使用mod_rewrite重写url。它显示正确的PHP页面,所以我假设已到达页面。 mod_rewrite会影响文件的上传。我不这么认为......?

    <!DOCTYPE html>
<html>
      <head>
            <title>Music Upload</title>
            <style>
                  #zone
                  {
                        height:300px;
                        width:500px;
                        border:1px solid black;
                  }
            </style>
      </head>
      <body>
            <div id="zone">
            <legend>Drop a file here&hellip;</legend>
            <p>Or click button to <em>Browse</em>&hellip;</p>
            </div>
            <form action="../receive/" method="POST" enctype="multipart/form-data">
                <input type="file" name="file[]" multiple />
                <input type="submit" value="submit" />
            </form>


            <script>
                  function dragover(event)
                  {
                        event.preventDefault();
                        console.log("drag event");
                        return false;
                  };
                  function dragend(event)
                  {
                        event.preventDefault();
                        console.log("drag end event");
                        return false;
                  };
                  function drop(event)
                  {
                        console.log("Files droped");
                        event.preventDefault();
                        var files=event.dataTransfer.files;
                        fileupload(files);

                  };

                  function isMp3(file)
                  {
                        console.log("Check if mp3 file");
                        mimeTypes=['audio/mpeg','audio/mp3','audio/x-mpeg-3'];
                        for(var i=0;i<mimeTypes.length;i++)
                        {
                              if(file.type==mimeTypes[i])
                              {
                                    return true;
                              };
                        };
                        return false;
                  };

                  function fileupload(files)
                  {
                        if(files.length>0)
                        {

                              var formData= new FormData();
                              var i=0;
                              while(i<files.length)
                              {
                                    var file= files.item(i);

                                    if(isMp3(file)){
                                          formData.append('file[]',files[i++]);
                                          console.log('valid mp3');
                                    }
                              }
                              var xhr = new XMLHttpRequest();
                              xhr.open('POST','/mymusic/receive',true);
                              xhr.onload=function()
                              {
                                    if(this.status==200)
                                    {
                                          console.log('data sent');
                                          console.log(this.responseText);

                                    }else
                                    {
                                          console.log('data failed');
                                    }
                              };
                              xhr.upload.onprogress=function(event)
                              {
                                    if(event.lengthComputable)
                                    {
                                          var complete=Math.round(event.loaded*100/event.total);
                                          console.log(complete+"%");
                                    }
                              };
                              xhr.send(formData);
                        }
                  };

                  var dropArea=document.getElementById("zone");
                  dropArea.addEventListener("dragover",dragover,false);
                  dropArea.addEventListener("dragend",dragend,false);
                  dropArea.addEventListener("drop",drop,false);
                  console.log('script loaded');
            </script>
      </body>
</html>
<?php exit();?>

这是服务器文件。这并不重要,只是加入

<?php

echo "server reached\n";
  var_dump($_POST);
  var_dump($_FILES);
  exit();
?>

1 个答案:

答案 0 :(得分:4)

尝试不使用rewrite,这很可能就是问题。