FormData发送文件,但$ _FILE是空的
问题描述:
我不知道为什么我打印出来时总是收到一个空的$ _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…</legend>
<p>Or click button to <em>Browse</em>…</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();
?>
答
尝试没有rewrite
,这是最有可能的问题。
如果将名称更改为file_up而不是文件[]? – Hackerman 2013-05-14 14:55:19
我不明白为什么会影响它。我有文件[],因为它是一个将要进入的文件数组,它们具有相同的名称。不是文件的名称,而是输入的名称值 – 2013-05-14 14:56:38
[使用Ajax XmlHttpRequest上传文件]的可能重复(http://*.com/questions/6211145/upload-file-with-ajax-xmlhttprequest)措辞不同,但答案应该是相同的 – Anigel 2013-05-14 14:58:29