在我的表格提交中,我有:
var formData = new FormData();
for (var i = 0; i < ctx.files.length; i++) {
formData.append('file[]', ctx.files[i]);
}
在我的服务器端,我只是转储$ _POST。
我明白了:
array(1) {
["file"]=>
array(1) {
[0]=>
string(17) "[object FileList]"
}
}
它是以字符串形式出现的,我怎样才能将它作为一个文件数组?
以下是整个请求:
var formData = new FormData();
for (var i = 0; i < ctx.files.length; i++) {
formData.append('file[]', ctx.files[i]);
//formData.push(ctx.files[i]);
}
// now post a new XHR request
var xhr = new XMLHttpRequest();
xhr.open('POST', '/site-manager-gateway/add-content');
xhr.onload = function () {
if (xhr.status === 200) {
console.log('all done: ' + xhr.status);
} else {
console.log('Something went terribly wrong...');
}
};
xhr.send(formData);
答案 0 :(得分:0)
发送前添加:
xhr.setRequestHeader("Content-Type","multipart/form-data");
之后,可以像这样访问文件:
$count = count($_FILES['file']['name']);
for($i=0; $i<$count; $i++)
{
echo 'Uploaded File With FileName: '.$_FILES['file']['name'][$i].'<br/>';
}
http://www.php.net/manual/en/reserved.variables.files.php
如果您转到此链接,您会看到$_FILES
变量将如下所示:
array(1) {
["upload"]=>array(5) {
["name"]=>array(3) {
[0]=>string(9)"file0.txt"
[1]=>string(9)"file1.txt"
[2]=>string(9)"file2.txt"
}
["type"]=>array(3) {
[0]=>string(10)"text/plain"
[1]=>string(10)"text/plain"
[2]=>string(10)"text/plain"
}
["tmp_name"]=>array(3) {
[0]=>string(14)"/tmp/blablabla"
[1]=>string(14)"/tmp/phpyzZxta"
[2]=>string(14)"/tmp/phpn3nopO"
}
["error"]=>array(3) {
[0]=>int(0)
[1]=>int(0)
[2]=>int(0)
}
["size"]=>array(3) {
[0]=>int(0)
[1]=>int(0)
[2]=>int(0)
}
}
}
您的文件位于临时文件夹中(在linux中,默认为/ tmp) 从这个临时文件夹恢复文件的唯一方法是在每个文件上使用php函数:
move_uploaded_file
“此函数检查以确保文件名指定的文件 是一个有效的上传文件(意味着它是通过PHP的HTTP上传的 POST上传机制)。如果文件有效,它将被移动到 目的地给出的文件名。
如果有任何机会,这种检查尤其重要 任何完成上传文件的内容都可以将其内容透露给 用户,甚至是同一系统上的其他用户。“
这是你应该怎么做的。如果你上传的目录叫做“上传”,那么:
<?php
$uploads_dir = '/uploads';
foreach ($_FILES["file"]["error"] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
$tmp_name = $_FILES["file"]["tmp_name"][$key];
$name = $_FILES["file"]["name"][$key];
move_uploaded_file($tmp_name, "$uploads_dir/$name");
}
}
?>
这会将所有文件保存在“/ uploads”目录中。