2013-05-14 80 views
1

我不知道爲什麼我打印出來時總是收到一個空的$ _FILES全局數組。我一直在看它,但我不明白我要去哪裏錯了。因爲我已經顯示了所有的代碼。 如果我使用它到達服務器的按鈕就好了,一切正常。但如果我使用拖放然後我沒有在服務器上的文件?任何想法爲什麼?當我打印數組時,它是數組(0)。

我發現了一個問題,我現在修復的while循環仍然沒有文件壽。 只是讓人們想知道後發作是否正確。該URL使用mod_rewrite重寫。它顯示正確的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(); 
?> 
+0

如果將名稱更改爲file_up而不是文件[]? – Hackerman 2013-05-14 14:55:19

+0

我不明白爲什麼會影響它。我有文件[],因爲它是一個將要進入的文件數組,它們具有相同的名稱。不是文件的名稱,而是輸入的名稱值 – 2013-05-14 14:56:38

+0

[使用Ajax XmlHttpRequest上傳文件]的可能重複(http://stackoverflow.com/questions/6211145/upload-file-with-ajax-xmlhttprequest)措辭不同,但答案應該是相同的 – Anigel 2013-05-14 14:58:29

回答

3

嘗試沒有rewrite,這是最有可能的問題。