2015-07-23 10 views

Antwort

20

Aus der Dokumentation: "Multer wird keine Dateierweiterung für Sie anhängen, Ihre Funktion sollte einen Dateinamen mit einer Dateierweiterung zurückgeben."

Hier ist, wie Sie die Erweiterung hinzufügen:

var multer = require('multer'); 

var storage = multer.diskStorage({ 
    destination: function (req, file, cb) { 
    cb(null, 'uploads/') 
    }, 
    filename: function (req, file, cb) { 
    cb(null, Date.now() + '.jpg') //Appending .jpg 
    } 
}) 

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

Ich würde empfehlen, die mimetype Eigenschaft mit der Erweiterung zu bestimmen. Zum Beispiel:

filename: function (req, file, cb) { 
    console.log(file.mimetype); //Will return something like: image/jpeg 

Weitere Informationen: https://github.com/expressjs/multer

+0

Dank dafür, arbeitete wie ein Charme .... – user3355603

+0

i folgen diese aber meine Dateien werden in C hochgeladen: Laufwerk meines Computers unter Uploads folder.how um sie in meinem Projektverzeichnis zu speichern. – jsgeek

+0

@kisor Sie sind nach [_dirname] (https://nodejs.org/docs/latest/api/globals.html#globals_dirname) – Scott

19

Sorry, kann ich nicht kommentieren die Antwort der Scott oben, aber ich habe eine Abhilfe für das Hinzufügen richtige Dateierweiterung. Wenn Sie path Modul-Knoten verwenden

var multer = require('multer'); 
var path = require('path') 

var storage = multer.diskStorage({ 
    destination: function (req, file, cb) { 
    cb(null, 'uploads/') 
    }, 
    filename: function (req, file, cb) { 
    cb(null, Date.now() + path.extname(file.originalname)) //Appending extension 
    } 
}) 

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

Dies ist die beste Lösung – aidonsnous

7

bekam ich die Erweiterung von file.mimetype Datei. Ich spalte den Mimetype und bekomme die Dateierweiterung davon Bitte versuchen Sie die folgende Funktion.

let storage = multer.diskStorage({ 
    destination: function (req, file, cb) { 
    cb(null, './uploads') 
    }, 
    filename: function (req, file, cb) { 
    let extArray = file.mimetype.split("/"); 
    let extension = extArray[extArray.length - 1]; 
    cb(null, file.fieldname + '-' + Date.now()+ '.' +extension) 
    } 
}) 
const upload = multer({ storage: storage }) 
+0

Es gibt ein Problem mit dieser Lösung, wenn Sie versuchen, hochzuladen eine .docx-Datei als dieser Ansatz schlägt fehl –

0

Im Jahre 2018 ist es so getan getan:

var storage = multer.diskStorage({ 
    destination: function (req, file, cb) { 
     cb(null, config.DIR) 
    }, 
    filename: function (req, file, cb) { 
     let ext = file.originalname.substring(file.originalname.lastIndexOf('.'), file.originalname.length); 
     cb(null, Date.now() + ext) 
    } 
}); 
const upload = multer({ 
    storage: storage 
}).any(); 
0

Ich mag dieses

var multer = require('multer'); 

var storage = multer.diskStorage({ 
    destination: function (req, file, cb) { 
    cb(null, './public/uploads/img/') 
    }, 
    filename: function (req, file, cb) { 
    let ext = file.originalname.substring(file.originalname.lastIndexOf('.'), file.originalname.length); 
    cb(null, Date.now() + ext); 
    } 
}) 

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

tue es in den bereits beantwortet Codes einige Probleme sein kann.

  • Es kann ohne Erweiterung einige Fälle von Dateien sein.
  • Es sollte keine upload.any() Verwendung sein. Sein anfällig für die Angreifer
  • Die Upload-Funktion sollte nicht global sein .

Ich habe die folgenden Codes für eine bessere Sicherheit geschrieben.

var storage = multer.diskStorage({ 
    destination: function (req, file, cb) { 

     cb(null, 'temp/') 
    }, 
    filename: function (req, file, cb) { 
     let ext = ''; // set default extension (if any) 
     if (file.originalname.split(".").length>1) // checking if there is an extension or not. 
      ext = file.originalname.substring(file.originalname.lastIndexOf('.'), file.originalname.length); 
     cb(null, Date.now() + ext) 
    } 
}) 
var upload = multer({ storage: storage }); 

Verwenden sie für den Upload

// using only single file object name (HTML name attribute) 
// May use upload.array(["file1","file2"]) for more than one 
app.post('/file_upload', upload.single("file"), function (req,res) { 
    //console.log(req.body, 'Body'); 
    console.log(req.file, 'file'); 
    res.send("cool"); 
}) 
+1

Danke für Ihre Eingabe hier, aber das beantwortet die Frage nicht.Bitte denken Sie daran, eine neue Frage zu stellen und diese selbst zu beantworten, wenn Sie dieses Wissen in StackOverflow speichern möchten. Lesen Sie auch den Hilfebereich, bevor Sie das tun. – Graham

Verwandte Themen