2016-04-26 24 views
0

Ich versuche, Datei in bestimmtes Verzeichnis auf der Festplatte hochzuladen. Ich benutze Multer-Bibliothek. Und soweit ich diesen Code verstehe und wie er jetzt aussieht, wenn er eine Anfrage bekommt, nimmt er eine Datei von ihm und versucht sie zu speichern und es passiert getrennt vom Rest der Anfrage. Gibt es eine Möglichkeit, Zugriff auf die vollständige Anfrage zu bekommen, sagen wir die Zielfunktion (# 1). Hier ist mein CodeNodeJS Dateiupload mit Multer

var storage = multer.diskStorage({ 
    destination: function (req, file, callback) { 
     console.log(req) // #1 here i dont see other fields from request 
     callback(null, './uploads') 
    }, 
    filename: function (req, file, callback) { 
     callback(null, Date.now() + '-' + file.originalname) 
    } 
}) 

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

router.post('/api/photos', function (req, res, next) { 
    upload(req, res, function(err) { 
     console.log(req) // here i see other fields from request like req.body.description 
     if (err) {return next(err)} 
     res.json(201) 
    }) 
}); 

Was ich eigentlich tun möchte, ist Multer zu sagen. 'Hey Ich möchte, dass Sie die Datei im Verzeichnis/uploads/restOfThePat speichern. Wo restOfThePath in der Anfrage übergeben wird.

Ich weiß, dass ich den Speicherort der Datei später ändern kann (nicht versucht, weiß nicht, ob es funktioniert). Allerdings scheint es irgendwie hacky und ich kann nicht glauben, dass es keinen anderen sauberen Weg gibt. Offensichtlich ist Multer kein Muss, wenn es eine andere Bibliothek gibt, würde ich gerne einen Blick darauf werfen.

+0

sowieso diese Datei in Upload-Ordner zu speichern, in der router.post ('/ api/Fotos') erhalten Sie Holen Sie den Rest der Anfrage, überprüfen Sie das Feld mit 'req.body.form_field' danach, wenn Sie den Zielpfad ändern möchten, bewegen Sie die Datei aus dem Upload-Ordner, wo immer Sie mit fs benötigt –

Antwort

1

Sie können dies tun:

var storage = multer.diskStorage({ 
    destination: function (req, file, callback) { 
     console.log(req); 
     callback(null, req.body.what_you_want); 
    }, 
    filename: function (req, file, callback) { 
     callback(null, Date.now() + '-' + file.originalname); 
    } 
}) 

var upload = multer({ storage: storage }); 

router.post('/api/photos', upload.single('the_name') function (req, res, next) { 
    upload(req, res, function(err) { 
     console.log(req) // here i see other fields from request like req.body.description 
     if (err) {return next(err)} 
     res.json(201) 
    }) 
}); 

Es wirkt wie ein Zauber ...

Verwandte Themen