Удаленное хранение файлов в папке, но они сохраняются без расширения файла.Как сохранить файл с расширением файла с помощью multer?
Кто-нибудь знает, как сохранить файл с расширением?
Удаленное хранение файлов в папке, но они сохраняются без расширения файла.Как сохранить файл с расширением файла с помощью multer?
Кто-нибудь знает, как сохранить файл с расширением?
Из документов: «Multer не добавит вам расширения для файлов, ваша функция должна вернуть имя файла в комплекте с расширением файла».
Вот как вы можете добавить расширение:
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 });
Я рекомендую использовать mimetype
свойство для определения расширения. Например:
filename: function (req, file, cb) {
console.log(file.mimetype); //Will return something like: image/jpeg
Подробнее: https://github.com/expressjs/multer
К сожалению, я не могу прокомментировать ответ на Скотта выше, но у меня есть обходной путь для добавления надлежащего расширения файлов. При использовании узлового модуля path
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 });
Это лучшее решение – aidonsnous
я получил файл с расширением от file.mimetype
. Я разделил тип mimetype и получил расширение файла от него Пожалуйста, попробуйте выполнить функцию ниже.
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 })
Проблема с этим решением, если вы пытаетесь загрузить файл .docx, чем этот подход завершается –
В 2018 году, как это делается, как это сделано:
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();
Я делаю как этот
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');
Там могут быть некоторые проблемы в уже отвеченных кодов.
upload.any()
. Его уязвим для злоумышленниковЯ написал ниже для лучшей безопасности.
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 });
Использование его для загрузки
// 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");
})
Спасибо за ваш вклад здесь, но это не отвечает на вопрос.Пожалуйста, подумайте о том, чтобы опубликовать новый вопрос и ответить на него самостоятельно, если вы хотите хранить эти знания в StackOverflow. Также прочитайте раздел справки, прежде чем вы это сделаете. – Graham
спасибо за это, работал как шарм .... – user3355603
я следить за этим, но мои файлы загружаются в C: диск моего компьютера под загрузки folder.how чтобы сохранить их в моей директории проектов. – jsgeek
@kisor вы после [_dirname] (https://nodejs.org/docs/latest/api/globals.html#globals_dirname) – Scott