2017-12-19 6 views
1



Ich habe versucht, eine Datei mit node.js und ajax hochzuladen, aber ich kann es nicht funktionieren lassen. Ich erhalte keinen Fehler, aber nichts ist in meinem Speicherordner.Node.js + ajax, Datei hochladen

index.js:

app.post('/newFlavour', function(req, res){ 
console.log("[INFO] New flavour request: " + req.body.name); 

let form = new formidable.IncomingForm(); 
form.uploadDir = path.join(__dirname, '/storage'); 

form.on('file', function(field, file) { 
    fs.rename(file.path, path.join(form.uploadDir, file.name)); 
}); 

form.on('error', function(err) { 
    console.log('An error has occured: \n' + err); 
}); 

form.on('end', function() { 
    console.log('success'); 
}); 

form.parse(req); }); 

Meine Funktion mit der Ajax-Anfrage:

function createFlavour() { 
let file = $('#upload-input').get(0).files; 
const formData = new FormData(); 
formData.append('uploads', file, file.name); 

console.log(file) 

$.ajax({ 
    url: "http://localhost:3000/newFlavour", 
    type: "POST", 
    dataType: "json", 
    data: JSON.stringify({ 
     name: $('#name').val(), 
     file: file 
    }), 
    contentType: "application/json", 
    success: function (data) { 
     console.log(data); 
    }, 
    error: function() { 
     alert("Error occured"); 
    }, 
    complete: function() { 
     console.log("complete") 
    } 
}); 

clearModal(); } 

Der Eingang tag:

<input id="upload-input" type="file" name="upload"></br> 

Ich weiß nicht, was ich hier fehle .

Vielen Dank im Voraus!

+1

'Ich habe nicht eine error', oder vielleicht haben Sie tun .. Ich ignoriere alle Fehler an 2 Stellen, die ich sehen kann, eine auf Ihrem 'fs.rename', und wieder auf der' form.parse', ... bekommen Sie die Fehlerbehandlung sortiert und es könnte Ihnen einen Hinweis geben das Problem. – Keith

Antwort

1

Sie sollten Ihre req am Anfang analysieren. Auch pro formidable documentation

fileBegin

Emittieren, wenn eine neue Datei im Upload-Datenstrom erkannt wird. Verwenden Sie dieses Ereignis , wenn Sie die Datei an eine andere Stelle streamen möchten, während der Upload des Dateisystems gepuffert wird.

form.on ('fileBegin', Funktion (Name, Datei) {});

so tun dies sollte Ihre Datei speichern

app.post('/newFlavour', function (req, res){ 
    var form = new formidable.IncomingForm(); 

    form.parse(req); 

    form.on('fileBegin', function (name, file){ 
     file.path = __dirname + '/storage/' + file.name; 
    }); 

    form.on('file', function (name, file){ 
     console.log('Uploaded ' + file.name); 
    }); 

    res.status(200); 
}); 

Sie auch ajax Beitrag falsch ist, sollte diese Arbeit

var data = new FormData(); 
    $.each($('#upload-input')[0].files, function(i, file) { 
     data.append('file-'+i, file); 
    }); 

    $.ajax({ 
     url: 'http://localhost:3000/newFlavour', 
     data: data, 
     cache: false, 
     contentType: false, 
     processData: false, 
     method: 'POST', 
     type: 'POST', // For jQuery < 1.9 
     success: function(data){ 
      alert(data); 
     } 
    }); 
+0

Danke für deinen Kommentar, ich habe diese Zeile an die Spitze verschoben. Aber nichts passiert. Wenn ich meine Formulardaten in Zeile 6 unter functions.js mit der Konsole protokolliere, ist dies die Ausgabe: FormData {}. Ich denke, da läuft etwas schief. – xVanjaZ

+0

Ich habe meine Antwort aktualisiert. Bitte überprüfen Sie es – Stamos

+0

Das hat funktioniert! Danke vielmals! – xVanjaZ