2017-09-16 1 views
1

Ich versuche Multer zu verwenden, um eine Datei von einem HTML-Formular auf der Client-Seite auf die Server-Seite zu laden, verarbeitet das Multer-Modul die Datei auf der Serverseite.Multer nicht hochladen Datei

Die Sache hier ist alles ist in Ordnung, weil ich die 200 ok Antwort vom Server bekomme, aber die Datei sollte in mein Dateisystem hochgeladen werden und ich kann es nicht sehen.

Das ist mein HTML-Formular

<template> 
    <div id="app"> 
    <form action="http://localhost:3000/upload" method="post" enctype="multipart/form-data"> 
     <h2>Select a file</h2> 
     <input name="curriculum" id="inputVal" type="file"> 
     <button type="submit">Send</button> 
    </form> 
    </div> 
</template> 

meine Server-Seite Code

var express = require('express'); 
var router = express.Router(); 
var path = require('path'); 
var fs = require('fs'); 
var multer = require('multer') 
var storage = multer.diskStorage({ 
    destination: function(req,file,callback) { 
    callback(null, '../files'); 
    }, 
    filename: function(req,file,callback) { 
    callback(null,Date.now() + file,callback); 
    } 

}) 
var upload = multer({ storage: storage }).single('curriculum'); 

router.post('/upload', function (req, res, next) { 
    upload(req,res, function(err){ 
    if(err) { 
     return res.status(404).send("a error ocurred"); 
    } 
    res.status(200).send("file uploaded"); 
    }); 
}); 

module.exports = Router;

UPDATE

änderte ich meine Lösung Basis don die npm multer Website (Serverseite)

var express = require('express'); 
var router = express.Router(); 
var path = require('path'); 
var fs = require('fs'); 
var multer = require('multer') 
var upload = multer({ dest: 'uploads/' }); 

router.post('/upload',upload.single('curriculum') ,function (req, res, next) { 
    console.log(req.files); 
}); 

module.exports = Router;

Ty für die Hilfe!

+0

Haben Sie den entsprechenden Lese-/Schreib persmission zu Ihrem Zielordner festlegen, in dem Sie versuchen, Ihre Dateien hochladen ? –

+0

ja ich habe, ich bekomme keinen Fehler, normalerweise würde ich ein CORS bekommen, aber ich erlaube es in meiner APP-Datei, ich weiß nicht, warum es nicht funktioniert –

+0

Können Sie bitte versuchen, '/' nach Dateien hinzuzufügen als 'callback (null, '../ files /');' und sehen, ob es funktioniert? –

Antwort

1

Sie geben nicht die Datei an, die Sie hochladen möchten. Setzen Sie den Namen der input.

router.post('/upload', upload.single('curriculum'), function (req, res, next) { 
    if(err) { 
     console.log(err); 
     return res.status(404).send("a error ocurred"); 
    } 
    console.log(req.file); 
    res.status(200).send("file uploaded"); 
}); 

auch in Ihrem Dateinamen, stellen Sie sicher, dass Ihre Datei mit einer Erweiterung endet wie .png oder .jpeg sonst werden Sie Bündel von Bytecode sehen, die nichts bedeuten.

Sie können entweder den genauen Dateinamen erhalten, die Ihr Kunde gibt Ihnen durch file.originalname

cb(null, file.originalname) 

, oder Sie können es explizit hinzufügen.

callback(null, file.fieldname + '-' + Date.now() + '.png') 

Sie könnten den dritten Parameter von callback(null,Date.now() + file,callback) die callback ist entfernen möchten, wie es das Programm abgehört werden könnten, und + file zu so etwas wie + file.originalname ändern, weil file ein Objekt ist, und der Computer möglicherweise Probleme sein, ein Objekt besucht zu einem Dateinamen.

UPDATE

Haupt NodeJS

var express = require('express') 
var multer = require('multer') 
var app = express() 

var storage = multer.diskStorage({ 
    destination: function (req, file, cb) { 
    cb(null, __dirname + '/uploads')  //you tell where to upload the files, 
    }, 
    filename: function (req, file, cb) { 
    cb(null, file.fieldname + '-' + Date.now() + '.png') 
    } 
}) 

var upload = multer({storage: storage, 
    onFileUploadStart: function (file) { 
     console.log(file.originalname + ' is starting ...') 
    }, 
}); 

app.set('view engine', 'ejs'); 

app.get('/', function(req, res, next){  
    res.render('mult'); //our html document 
}) 

app.post('/profile', upload.single('avatar'), function (req, res, next) { 
    // req.file is the `avatar` file 
    console.log(req.file); 
    return false; 
}) 

HTML FORM

<!DOCTYPE html> 
<html> 
    <head> 
    <meta charset="utf-8"> 
    <title></title> 
    </head> 
    <body> 
    <form accept="image/x-png,image/gif,image/jpeg" enctype="multipart/form-data" action="/profile" method="post"> 
     <input type="file" name="avatar" value=""> 
     <input type="submit" name="" value="ssss"> 
    </form> 
    </body> 
</html> 
+0

hey turmuka sehen meine Bearbeitung, immer noch nicht funktioniert –

+0

Hey, überprüfen Sie mein Update, diese Codes funktionieren gut für mich, sollten Sie wahrscheinlich einige Änderungen vornehmen Ihre 'upload' Variable @ costacosta – turmuka

+0

lassen Sie mich wissen, wenn es @costacosta gut funktioniert – turmuka

Verwandte Themen