2016-10-15 6 views
10

काम नहीं कर रहा है मैंने HTML में input तत्व का उपयोग करके अपने स्थानीय अपाचे वेबसर्वर पर एक छवि अपलोड करने के लिए लिखा था। file खाली नहीं है, लेकिन form_data क्यों खाली है?फॉर्मडाटा

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

क्या आपने यूआरएल में 'upload.php' का उपयोग करने का प्रयास किया है? एक पूर्ण पथ देखने के लिए आम नहीं है, और स्थानीयहोस्ट का उल्लेख नहीं करना, याद रखें कि AJAX कॉल निर्भर करता है कि जावास्क्रिप्ट फ़ाइल कहां बैठती है, उदाहरण के लिए यदि आपके पास "phpFiles/upload.php" नामक आपकी रूट के भीतर कोई फ़ोल्डर है, तो वह यूआरएल में रखा जाना चाहिए। – Leo

+0

console.log (form_data); ओ/पी क्या हो रहा है? –

+0

आप क्या देखने की उम्मीद कर रहे हैं? आप वास्तव में फॉर्मडाटा ऑब्जेक्ट को लॉग नहीं कर सकते हैं, इसलिए यह खाली होना चाहिए, भले ही फ़ाइल वहां हो। अगर फ़ाइल प्राप्त हुई थी या नहीं तो क्या आपने सर्वर की जांच की थी। – adeneo

उत्तर

15

के प्राप्त परिणाम के बजाय है जब बस के साथ एक formData वस्तु प्रवेश करने console.log(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

यह वेबसर्वर पर कब स्टोर करेगा? मुझे 'अपलोड' – necroface

+0

का स्थान नहीं मिल रहा है, मुझे लगता है कि यह '/ var/www/html' है लेकिन मुझे वहां 'अपलोड' नहीं दिखाई दे रहा है – necroface

-1

मैं अपने आप को देखा है कि contentType: false केवल jQuery 1.7.0 पर काम करेंगे पाने के लिए और ऊपर। तो सुनिश्चित करें कि आप सही jQuery संस्करण का उपयोग कर रहे हैं।

संबंधित मुद्दे