2016-10-15 65 views
10

我寫了這個使用HTML中的input元素將圖像上傳到我的本地Apache網絡服務器。 file被記錄爲非空,但爲什麼form_data完全空?FormData附加不起作用

$('#upload-image').change(function(e){ 
    var file = e.target.files[0]; 
    var imageType = /image.*/; 
    if (!file.type.match(imageType)) 
     return; 
    console.log(file); 
    var form_data = new FormData(); 
    form_data.append('file', file); 
    console.log(form_data); 
    $.ajax({ 
     url: 'http://localhost/upload.php', 
     cache: false, 
     contentType: false, 
     processData: false, 
     data: form_data, 
     type: 'POST', 
     success: function(response){ 
      console.log(response); 
     }, 
     error: function(error){ 
      console.log(error); 
     } 
    }); 

}); 

這是本地網絡服務器我upload.php

<?php 
    header('Access-Control-Allow-Origin: *'); 
    if (0 < $_FILES['file']['error']) { 
     echo 'Error: ' . $_FILES['file']['error'] . '<br>'; 
    } 
    else { 
     move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/' . $_FILES['file']['name']); 
     $target_path = $_SERVER['DOCUMENT_ROOT'] . "/uploads/" . $_FILES['file']['name']; 
     echo $target_path; 
    } 
?> 

console.log(response)記錄所有PHP文件的代碼行,而不是echo

+0

你試過在url中使用'upload.php'嗎?查看絕對路徑並不常見,更不用說本地主機了,請記住,AJAX調用取決於JavaScript文件所在的位置,例如,如果您的根目錄中有一個名爲「phpFiles/upload.php」的文件夾,那麼應該放在網址中。 – Leo

+0

console.log(form_data);你在這裏得到什麼? –

+0

你期待看到什麼?你不能真正地記錄一個formData對象,所以它應該是空的,即使該文件在那裏。如果收到文件,你檢查了服務器嗎? – adeneo

回答

15

返回的結果在登錄時,只需FORMDATA對象console.log(formData)它總是返回空白,因爲您無法記錄formData。

如果你只是在發送前記錄它,你可以使用entries()獲得在FORMDATA條目對象

$('#upload-image').change(function(e) { 
    var file = e.target.files[0]; 
    var imageType = /image.*/; 

    if (!file.type.match(imageType)) return; 

    var form_data = new FormData(); 
    form_data.append('file', file); 

    for (var key of form_data.entries()) { 
     console.log(key[0] + ', ' + key[1]); 
    } 

    $.ajax({ 
     url: 'http://localhost/upload.php', 
     cache: false, 
     contentType: false, 
     processData: false, 
     data: form_data, 
     type: 'POST', 
     success: function(response) { 
      console.log(response); 
     }, 
     error: function(error) { 
      console.log(error); 
     } 
    }); 

}); 
+0

它什麼時候會存儲在網絡服務器上?我找不到'uploads'的位置 – necroface

+0

我認爲它是'/ var/www/html',但我在那裏看不到'uploads' – necroface

-1

我注意到自己的contentType: false將只對jQuery的1.7.0工作以上。所以請確保您使用的是正確的jQuery版本。