Verwaltet, um meine Dateien in einem Ordner zu speichern, aber sie speichern ohne die Dateierweiterung.Wie speichert man eine Datei mit Dateierweiterung mit Multer?
Weiß jemand wie würde ich die Datei mit der Dateierweiterung speichern?
Verwaltet, um meine Dateien in einem Ordner zu speichern, aber sie speichern ohne die Dateierweiterung.Wie speichert man eine Datei mit Dateierweiterung mit Multer?
Weiß jemand wie würde ich die Datei mit der Dateierweiterung speichern?
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
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 });
Dies ist die beste Lösung – aidonsnous
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 })
Es gibt ein Problem mit dieser Lösung, wenn Sie versuchen, hochzuladen eine .docx-Datei als dieser Ansatz schlägt fehl –
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();
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');
tue es in den bereits beantwortet Codes einige Probleme sein kann.
upload.any()
Verwendung sein. Sein anfällig für die AngreiferIch 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");
})
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
Dank dafür, arbeitete wie ein Charme .... – user3355603
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
@kisor Sie sind nach [_dirname] (https://nodejs.org/docs/latest/api/globals.html#globals_dirname) – Scott