Gestito per archiviare i miei file in una cartella ma essi memorizzano senza l'estensione del file.Come memorizzare un file con estensione di file con multer?
Qualcuno sa come posso archiviare il file con l'estensione del file?
Gestito per archiviare i miei file in una cartella ma essi memorizzano senza l'estensione del file.Come memorizzare un file con estensione di file con multer?
Qualcuno sa come posso archiviare il file con l'estensione del file?
Dalla documentazione: "Multer non aggiungerà alcuna estensione di file per te, la tua funzione dovrebbe restituire un nome file completo con un'estensione di file".
Ecco come è possibile aggiungere l'estensione:
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 });
mi consiglia di utilizzare la proprietà mimetype
per determinare l'estensione. Per esempio:
filename: function (req, file, cb) {
console.log(file.mimetype); //Will return something like: image/jpeg
Maggiori informazioni: https://github.com/expressjs/multer
Mi dispiace, non posso commentare la risposta di Scott sopra, ma ho una soluzione per l'aggiunta corretta estensione dei file. Se si utilizza path
modulo nodo
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 });
Questa è la soluzione migliore – aidonsnous
ho ottenuto presentare l'estensione da file.mimetype
. Ho diviso il mimetype e l'estensione del file da esso Si prega di provare la funzione qui sotto.
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 })
C'è un problema con questa soluzione se provi a caricare un file .docx rispetto a questo approccio fallisce –
Nel 2018, si è fatto fatto in questo modo:
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();
sto facendo in questo modo
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');
Ci possono essere alcuni problemi nei codici già risposto.
upload.any()
. È vulnerabile agli aggressoriHo scritto i seguenti codici per una maggiore sicurezza.
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 });
Usandolo per l'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");
})
Grazie per l'input qui, ma questo non risponde alla domanda.Ti preghiamo di considerare di pubblicare una nuova domanda e di rispondere autonomamente se desideri memorizzare questa conoscenza su StackOverflow. Leggi anche la sezione di aiuto prima di farlo. – Graham
grazie per questo, ha lavorato come un fascino .... – user3355603
seguo questo, ma i miei file vengono caricati in C: l'azionamento del mio computer sotto arrivi folder.how per salvarli nella directory del mio progetto. – jsgeek
@kisor che stai cercando [_dirname] (https://nodejs.org/docs/latest/api/globals.html#globals_dirname) – Scott