Udało mi się przechowywać moje pliki w folderze, ale przechowują je bez rozszerzenia pliku.Jak zapisać plik z rozszerzeniem pliku za pomocą multer?
Czy ktoś wie, jak mogę przechowywać plik z rozszerzeniem pliku?
Udało mi się przechowywać moje pliki w folderze, ale przechowują je bez rozszerzenia pliku.Jak zapisać plik z rozszerzeniem pliku za pomocą multer?
Czy ktoś wie, jak mogę przechowywać plik z rozszerzeniem pliku?
Z dokumentów: "Multer nie doda dla ciebie żadnego rozszerzenia pliku, twoja funkcja powinna zwrócić nazwę pliku z rozszerzeniem pliku."
Oto w jaki sposób można dodać rozszerzenie:
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 });
Polecam pomocą właściwości mimetype
określić rozszerzenie. Na przykład:
filename: function (req, file, cb) {
console.log(file.mimetype); //Will return something like: image/jpeg
Więcej informacji: https://github.com/expressjs/multer
Niestety, nie mogę wypowiedzieć się na temat odpowiedzi udzielonej przez Scotta powyżej ale mam obejście dla dodanie właściwego rozszerzenia plików. Jeśli używasz path
modułu Node
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 });
To jest najlepsze rozwiązanie – aidonsnous
Mam plik z rozszerzeniem z file.mimetype
. Rozdzielam typ MIME i otrzymuję od niego rozszerzenie pliku Proszę wypróbować poniższą funkcję.
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 })
Wystąpił problem z tym rozwiązaniem, jeśli próbujesz przesłać plik .docx niż ten sposób nie powiedzie się –
W 2018 roku, odbywa się zrobić tak:
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();
robie jak ten
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');
Nie mogą być pewne problemy w już odpowiedzieli kodów.
Napisałem poniższe kody dla lepszego bezpieczeństwa.
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 });
Używanie go do przesłania
// 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");
})
Dziękuję za twoje dane wejściowe, ale to nie odpowiada na pytanie.Rozważ umieszczenie nowego pytania i samodzielną odpowiedź, jeśli chcesz zapisać tę wiedzę na StackOverflow. Przeczytaj także sekcję pomocy, zanim to zrobisz. – Graham
Dzięki za to, pracował jak czar .... – user3355603
śledzę tego, ale moje pliki są przesyłane na dysku C: z mojego komputera na podstawie przesłanych folder.how aby zapisać je w moim katalogu projektu. – jsgeek
@kisor, którego szukasz [nazwa_domeny] (https://nodejs.org/docs/latest/api/globals.html#globals_dirname) – Scott