文件上传到数据库是空的

时间:2014-06-28 18:09:57

标签: javascript php jquery html html5

我想上传一个文件数组,将其发送到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')");

 }
   }
 }

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()

希望这有帮助。