如何使用Node.js保存文件路径到我的数据库?



我有一个简单的HTML表单,允许用户上传文件。在提交时使用auth/post/发布。

我的路线是这样的:

const express = require('express');
const authController = require('../controllers/auth');
const router = express.Router();
const multer  = require('multer');
function checkFileType(file, cb){
const filetypes = /jpeg|jpg|png|gif|mp3|ogg|aac|wav/;
if (req.fileValidationError) {
return res.send(fileValidationError);
}
const extname = filetypes.test(path.extname(file.originalname).toLowerCase());
const mimetype = filetypes.test(file.mimetype);
if(mimetype && extname){
return cb(null,true);
} else {
cb('Format not allowed!');
}
}
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null,'./user_uploads/')
},
fileFilter: function(req, file, cb){
checkFileType(file, cb);
},
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
}).single('user_file');
router.post('/post', upload, function(req, res, next){ res.locals.storage = storage; next();}, authController.post);
module.exports = router;

当你使用'upload'时,它会检查你实际输入的内容是否正确,格式是否正确,更改文件名并将其保存到临时文件夹。

我现在想要获取存储变量,也就是我的authController.post的文件路径/名称/扩展名。

这是一个具有导出的控制器,其他所有内容都保存到数据库中。如何将path变量传递给它呢?

作为参考,它看起来像这样(我需要将路径放入user_path: _______):

exports.post = (req, res, next) => {
let { name, title, cat, con, user_file } = req.body;
const time = new Date().toJSON().slice(0, 19).replace('T', ' ');
let cat_id = 0;
if(req.files) user_file.fileName = req.file.filename;
db.query("SELECT id FROM cat WHERE cat_name = ?", [cat], async function(err, results) {
if (!err)
cat_id = results[0].id;
else
console.log(err);
const ID = await promisify(jwt.verify)(req.cookies.scrooc, process.env.jwtsecret);
const id = ID.id;
db.query('INSERT INTO posts SET ?', {user_id: id, cat_id: cat_id, time: time, title: title, content: con, user_file: res.locals.storage, reply: 0 }, (error, results) => {
if(error)
console.log(error);
else
res.status(200).redirect('/post');
});
});
};

我认为你应该尝试写一个文本字段(QLineEdit在Python中),设置文件名路径的文本字段,然后保存文本字段的内容到您的数据库使用插入语句在插入值到您的数据库。例如,使用Python,这里有一种方法可以实现这一点:getfile是我的函数的名称,您可以为自己的函数命名任何名称,但要记住调用它。photoinfo是我的QLineEdit的名字,在Java中,如果我还记得的话,它被称为JTextField。所以尝试在我的代码中使用逻辑,看看它是否可以解决你的。

'''    def getfile(self):
self.file_name = QtWidgets.QFileDialog.getOpenFileName(None, "Open", "", "All Files (*);;JPG Files(*.jpg)")
try:
if self.file_name[0] != '':
print("success")
self.photoInfo.setText(self.file_name[0])
else:
print("error")
except Exception as e:
print(e)

我最终只完成了路由中的全部功能。可能不是那么干净,但它工作。

最新更新