2013-05-14 5 views
1

인쇄 할 때 왜 빈 $ _FILES 전역 배열이 계속 표시되는지 모르겠습니다. Ive는 그것을 끝내었다. 그러나 내가 어디로 잘못 가고 있는지 알 수 없다. 그 때문에 나는 모든 코드를 보여 줬다. 버튼을 사용하면 서버에 도달하고 모든 것이 제대로 작동합니다. 하지만 드래그 앤 드롭을 사용하면 서버에 파일이 없습니다. 왜 어떤 생각? 배열을 인쇄 할 때 배열 (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

+0

그 이유가 영향을 미치는지 모르겠다. 들어오는 파일의 배열이고 같은 이름을 가지고 있기 때문에 파일 []이 있습니다. 파일의 이름이 아니라 입력의 이름 값 –

+0

[Ajax XmlHttpRequest를 사용하여 파일 업로드] (http://stackoverflow.com/questions/6211145/upload-file-with-ajax-xmlhttprequest)의 가능한 복제본은 다르게 사용되었지만 대답은 동일해야합니다 – Anigel

답변

3

rewrite없이 그것을 시도한다.