2015-07-13 49 views
0

我有一個允許我提交文本+文件數量的表單。隨AJAX一起提交的表單。用ajax上傳文件數組

因爲它是一個大量的文件我上傳的功能給我的錯誤:

Warning: move_uploaded_file(images/usersFiles/14367317720-101.JPG) [function.move-uploaded-file]: failed to open stream: No such file or directory in C:\Program Files (x86)\wamp\www\new-site\func\global.func.php on line 134

線134是:

if (move_uploaded_file($files['file']['tmp_name'][$i], USER_FILES.$files['file']['name'][$i])) 

文件var目錄應該陣列(因爲我可以加載的文件數) 。

我該如何解決這個錯誤?

HTML:

<form class="form-horizontal" action='#' method="post" id="addCommentForm" enctype="multipart/form-data"> 

    <textarea class="form-control" name="post[text]"></textarea> 
    <input type='file' name='file[]' class='multi form-control' maxlength='1' accept='gif|jpg|png|bmp' id="files"/> 
    <a class="btn btn-primary" id="submit">submit</a> 

</form> 

JS:

$(function() { 
    $("#submit").click(function() { 

     var file_data = $('#files').prop('files')[0]; 
     var form_data = new FormData();     
     form_data.append('file[]', file_data); 
     var files_data = form_data; 

     var act = 'add'; 
     form_data.append('act', act); 
     form_data.append('post[text]', $("#addCommentForm").find("textarea").val()); 

     $.ajax({ 
       type: "POST", 
       url: "ajax/addPost.php", 

       dataType: 'text', 
       cache: false, 
       contentType: false, 
       processData: false, 

       data: form_data, 
       success: function(data) 
       { 
       $('#commentsBox').html(data); 
       $("#addCommentForm")[0].reset(); 
       } 

      }); 

     return false; // avoid to execute the actual submit of the form. 
    }); 
}); 

服務器:

function upload_files ($ownerID, $msg, $files, $type) 
{ 

    $dateLX = get_current_linuxTime(); 

    ///////// Upload files ////////////// 
    if(!empty($files)) 
    { 

     foreach($files['file']['name'] as $i => $fileName) 
     { 
      $fileSurffix = pathinfo ($_FILES['file']['name'][$i]); 
      $fileSurffix = $fileSurffix['extension']; 

      $files['file']['name'][$i] = str_replace(' ','',$files['file']['name'][$i]); 
      $files['file']['name'][$i] = $dateLX.$i."-".$ownerID.".".$fileSurffix; 
      $fileName = $files['file']['name'][$i]; 

      if (move_uploaded_file($files['file']['tmp_name'][$i], USER_FILES.$files['file']['name'][$i])) 
      { 
       $uploadFilesQuery = "INSERT INTO `files` (ownerID, name, type) 
             VALUES('$ownerID', '$fileName', '$type')"; 

       $res = mysql_query($uploadFilesQuery); 
       if (!$res) 
        $msg['error']['uploadFile'] = "error <br />".mysql_error(); 
      } 
      elseif ($files['file']['error'][$i] != 4) 
       $msg['error']['uploadFile'] = "ERROR "; 


     } 
    } 
    return ($msg); 

} 

回答

0

USER_FILES必須是絕對路徑一樣

"C:\Program Files (x86)\wamp\www\new-site\images\usersFiles\" 
+0

USER_FILES =「images/usersFiles /」 – Roi

+0

來自PHP的錯誤提示表示沒有這樣的文件或目錄。所以要麼沒有源文件或目標文件。嘗試使用is_dir和is_file進行檢查。並做一些print_r()來查看數組中的實際內容。我真的認爲圖像/ usersFiles /是沒有根目錄或Windows上的硬盤) –

0

你不能通過AJAX上傳文件,根本不可能。有很多方法和庫可以做到,叫做「AJAX」文件上傳器。但事實是 - 他們不是。最流行的解決方案是基於Flash/AS的文件上傳器,也有一種方法可以通過隱形iframe來實現。事實是,它不取決於你是否嘗試上傳1個文件或多個文件。您無法通過AJAX發送文件內容。看看這裏,這可能會讓你走上一條路。

+0

我的代碼已經做到了(當它只有1個文件,而不是數組文件):) – Roi

+0

嗯..有趣的,它可能是因爲form_data.append('file []',file_data); ?好像你正在將整個file_data分配給單個文件元素。這將解釋爲什麼單個文件出現在php的文件[0]中,但在這種情況下,您的文件[0]將是一個文件數組,文件應該位於它們自己的文件[]元素(文件[0],文件[ 1] etc ... – Auris

+0

當你發送1個文件時失敗 和鋼 - 當我發送1個文件時,我的上傳功能不起作用。目錄在...「? – Roi