我想上传一个文件数组,将其发送到javascript formData对象,然后通过ajax将某个文件放入数据库。当我上传一个文件,将其发送到javascript中的formData对象并将其发送到php时,它工作正常。
问题是当我通过formData对象发送一个文件数组时,我的php脚本会将一个空文件插入数据库(BLOB - 0B
)。我做错了什么?
示例:
<form method="post" action="javascript:sendPHP()" enctype="multipart/form-data">
<input type="file" onchange = 'handleFiles(this.files)' name="pics[]" />
<input type="file" onchange = 'handleFiles(this.files)' name="pics[]" />
<input type="file" onchange = 'handleFiles(this.files)' name="pics[]" />
<input type="submit" value="Upload" />
//Javascript
var formData = new FormData();
function handleFiles(files) {
var file = files[0];
formData.append('pics[]', file, file.name);
}
function sendPHP() {
$.ajax({
type: "POST",
url: "../php/haus.php",
data: formData,
processData: false,
contentType: false,
success: function(data){}
})}
//php
if(strtolower($_SERVER['REQUEST_METHOD']) == 'post' && !empty($_FILES))
{
foreach($_FILES['pics']['tmp_name'] as $index => $tmpName )
{
if(!empty($tmpName) && is_uploaded_file($tmpName))
{
$imgData= addslashes(file_get_contents($_FILES['pics']['tmp_name']));
$resultPics = $dbConnection->query("INSERT INTO picture (pic, text, id) VALUES ('".$imgData."', 'Hi','1')");
}
}
}
答案 0 :(得分:0)
multiple="multiple"
中缺少此属性<input>
这样做, <input type="file" onchange = 'handleFiles(this.files)' name="pics[]" multiple="multiple" />
此功能仅处理单个文件上传
function handleFiles(files) {
var file = files[0];
formData.append('pics[]', file, file.name);
}
对于多次上传,您需要使用内部循环附加到每个文件。
像这样的东西,
function handleFiles(files) {
for(var file in files)
{
formData.append('pics[]', file, file.name);
}
PHP
部分,您需要在那里使用循环来遍历每个文件并使用json_encode()
将文件数组转换为json字符串,以便您可以将记录插入数据库中的字符串,并在从数据库检索数据时使用json_decode()
。希望这有帮助。