2016-10-15 19 views
10

Napisałem to, aby przesłać obraz do mojego lokalnego serwera WWW Apache, używając elementu input w kodzie HTML. file jest zalogowany jako nie pusty, ale dlaczego form_data jest całkowicie pusty?Dodatek FormData nie działa

$('#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); 
     } 
    }); 

}); 

To jest moje upload.php na lokalnym serwerze internetowym

<?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; 
    } 
?> 

The console.log(response) dzienników wszystkie linie kodu z pliku PHP, zamiast zwróconego wyniku echo

+0

czy próbowałeś używać w adresie URL "upload.php"? Nie jest powszechne, aby zobaczyć absolutną ścieżkę, a nie mówiąc o localhost, pamiętaj, że wywołanie AJAX zależy od tego, gdzie znajduje się plik javascript, więc na przykład, jeśli masz folder w katalogu głównym o nazwie "phpFiles/upload.php", to należy umieścić w adresie URL. – Leo

+0

console.log (form_data); co jest o/p, jak się tu dostałeś? –

+0

Co spodziewasz się zobaczyć? Naprawdę nie można zarejestrować obiektu formData, więc powinien on być pusty, nawet jeśli plik istnieje. Czy sprawdziłeś serwer, czy plik został odebrany, czy nie. – adeneo

Odpowiedz

15

Po zalogowaniu obiekt formData z zaledwie console.log(formData) zawsze zwraca puste, ponieważ nie można zarejestrować formData.

Jeśli po prostu trzeba ją zalogować przed wysłaniem go można użyć entries() aby wpisy w formData sprzeciw

$('#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

Kiedy będzie przechowywany na serwerze internetowym? Nie mogę znaleźć lokalizacji 'uploads'a – necroface

+0

Myślę, że jest to'/var/www/html' ale nie widzę tam 'uploadów' – necroface

-1

Zauważyłem sobie, że contentType: false będzie działać tylko na jQuery 1.7.0 i powyżej. Dlatego upewnij się, że używasz właściwej wersji jQuery.